diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml new file mode 100644 index 000000000..479ab9af9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -0,0 +1,72 @@ +name: Bug report +description: Report an issue or bug with this library +labels: ['bug'] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + - type: checkboxes + id: non_api + attributes: + label: Confirm this is not an issue with the underlying OpenAI API + description: Issues with the underlying OpenAI API should be reported in our [Developer Community](https://community.openai.com/c/api/7) + options: + - label: This is an issue with the Python library + required: true + - type: checkboxes + id: non_azure + attributes: + label: Confirm this is not an issue with Azure OpenAI + description: Issues related to Azure OpenAI should be reported in the [Azure SDK repo](https://github.com/Azure/azure-sdk-for-net/issues) + options: + - label: This is not an issue with Azure OpenAI + required: true + - type: textarea + id: what-happened + attributes: + label: Describe the bug + description: A clear and concise description of what the bug is, and any additional context. + placeholder: Tell us what you see. + validations: + required: true + - type: textarea + id: repro-steps + attributes: + label: To Reproduce + description: Steps to reproduce the behavior. + placeholder: | + 1. Fetch a '...' + 2. Update the '....' + 3. See error + validations: + required: true + - type: textarea + id: code-snippets + attributes: + label: Code snippets + description: If applicable, add code snippets to help explain your problem. + render: C# + validations: + required: false + - type: input + id: os + attributes: + label: OS + placeholder: winOS + validations: + required: true + - type: input + id: language-version + attributes: + label: .NET version + placeholder: + validations: + required: true + - type: input + id: lib-version + attributes: + label: Library version + placeholder: + validations: + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..cb9e00e0b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,7 @@ +blank_issues_enabled: false +contact_links: + - name: OpenAI support + url: https://help.openai.com/ + about: | + Please only file issues here that you believe represent actual bugs or feature requests for the OpenAI .NET library. + If you're having general trouble with the OpenAI API, please visit our help center to get support. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml new file mode 100644 index 000000000..cdb9812e9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -0,0 +1,36 @@ +name: Feature request +description: Suggest an idea for this library +labels: ['feature-request'] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this feature request! + - type: checkboxes + id: non_api + attributes: + label: Confirm this is not a feature request for the underlying OpenAI API. + description: Feature requests for the underlying OpenAI API should be reported in our [Developer Community](https://community.openai.com/c/api/7) + options: + - label: This is not a feature request for the underlying OpenAI API + required: true + - type: checkboxes + id: non_azure + attributes: + label: Confirm this is not a feature request for Azure OpenAI. + description: Feature requests for Azure OpenAI should be reported reported in the [Azure SDK repo](https://github.com/Azure/azure-sdk-for-net/issues) + options: + - label: This is not a feature request for Azure OpenAI + required: true + - type: textarea + id: feature + attributes: + label: Describe the feature or improvement you're requesting + description: A clear and concise description of what you want to happen. + validations: + required: true + - type: textarea + id: context + attributes: + label: Additional context + description: Add any other context about the feature request here. \ No newline at end of file diff --git a/.github/workflows/live-test.yml b/.github/workflows/live-test.yml new file mode 100644 index 000000000..a8a706e75 --- /dev/null +++ b/.github/workflows/live-test.yml @@ -0,0 +1,42 @@ +# This workflow is triggered by the user and runs live tests on the codebase. +name: Live Test + +on: + workflow_dispatch: + pull_request: + types: + - labeled + +jobs: + test: + name: Live Test + runs-on: ubuntu-latest + if: github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, 'live test') + environment: Live Testing + env: + version_suffix_args: ${{ format('/p:VersionSuffix="alpha.{0}"', github.run_number) }} + steps: + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '8.x' + + - name: Checkout code + uses: actions/checkout@v2 + + - name: Run live tests + run: dotnet test ./tests/OpenAI.Tests.csproj + --configuration Release + --filter="TestCategory!=Smoke&TestCategory!=Images&TestCategory!=Moderations&TestCategory!=Manual" + --logger "trx;LogFilePrefix=live" + --results-directory ${{github.workspace}}/artifacts/test-results + ${{ env.version_suffix_args}} + env: + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + + - name: Upload artifact + uses: actions/upload-artifact@v4 + if: ${{ !cancelled() }} + with: + name: test-artifacts + path: ${{github.workspace}}/artifacts diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 717955c05..54325dc64 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,6 @@ -name: Build and Test +# This worflow is triggered on push to main, pull request, or by manual invocation. +# It builds and unit tests the codebase. +name: Build and Unit Test on: workflow_dispatch: @@ -10,51 +12,36 @@ on: jobs: build: # Test, pack and publish the Open AI nuget package as a build artifact + name: Build runs-on: ubuntu-latest env: - version_suffix_args: ${{ format('--version-suffix="alpha.{0}"', github.run_number) }} + version_suffix_args: ${{ format('/p:VersionSuffix="alpha.{0}"', github.run_number) }} steps: - name: Setup .NET - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v3 with: - dotnet-version: 8.x + dotnet-version: '8.x' - name: Checkout code uses: actions/checkout@v2 - - name: Build and Pack + - name: Build and pack run: dotnet pack --configuration Release --output "${{github.workspace}}/artifacts/packages" - ${{ env.version_suffix_args }} + ${{ env.version_suffix_args}} - - name: Test + - name: Run unit tests run: dotnet test --configuration Release - --filter="TestCategory~${{ github.event_name == 'pull_request' && 'Offline' || 'Online' }}|TestCategory~smoke" - --logger "trx;LogFileName=${{github.workspace}}/artifacts/test-results/full.trx" - env: - OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + --filter="TestCategory=Smoke&TestCategory!=Manual" + --logger "trx;LogFilePrefix=smoke" + --results-directory ${{github.workspace}}/artifacts/test-results + ${{ env.version_suffix_args}} - name: Upload artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 + if: ${{ !cancelled() }} with: name: build-artifacts path: ${{github.workspace}}/artifacts - - - name: NuGet Autenticate - if: github.event_name != 'pull_request' - run: dotnet nuget add source - "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" - --name "github" - --username ${{ github.actor }} - --password ${{ secrets.GITHUB_TOKEN }} - --store-password-in-clear-text - - - name: Publish - if: github.event_name != 'pull_request' - run: dotnet nuget push - ${{github.workspace}}/artifacts/packages/*.nupkg - --source "github" - --api-key ${{ secrets.GITHUB_TOKEN }} - --skip-duplicate diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 59fb59f04..05989aaf9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,53 +1,105 @@ +# This workflow is triggered by new releases and on a daily schedule. +# It builds, unit tests, live tests and published the Open AI nuget package. +# For daily runs, the package is published to the GitHub package registry. +# For releases, the package is published to the NuGet package registry. name: Release package on: release: types: [published] + schedule: + # run every day at 00:00 + - cron: '0 0 * * *' jobs: - deploy: + build: + name: Build runs-on: ubuntu-latest + environment: Live Testing + env: + version_suffix_args: ${{ github.event_name == 'schedule' && format('/p:VersionSuffix="alpha.{0}"', github.run_number) || '' }} permissions: packages: write contents: write steps: - - uses: actions/checkout@v4 - - uses: actions/setup-dotnet@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v3 with: - dotnet-version: '8.x' # SDK Version to use. + dotnet-version: '8.x' + + - name: Checkout code + uses: actions/checkout@v2 # Pack the client nuget package and include url back to the repository and release tag - name: Build and Pack run: dotnet pack --configuration Release - --output "${{github.workspace}}/artifacts/packages" + --output "${{ github.workspace }}/artifacts/packages" /p:PackageProjectUrl="${{ github.server_url }}/${{ github.repository }}/tree/${{ github.event.release.tag_name }}" /p:PackageReleaseNotes="${{ github.server_url }}/${{ github.repository }}/blob/${{ github.event.release.tag_name }}/CHANGELOG.md" + ${{ env.version_suffix_args }} - - name: Test + - name: Unit Test run: dotnet test --configuration Release - --filter="TestCategory~Online" - --logger "trx;LogFileName=${{github.workspace}}/artifacts/test-results/full.trx" + --filter="TestCategory=Smoke&TestCategory!=Manual" + --logger "trx;LogFileName=${{ github.workspace }}/artifacts/test-results/smoke.trx" + ${{ env.version_suffix_args }} + + - name: Run Live Tests + run: dotnet test ./tests/OpenAI.Tests.csproj + --configuration Release + --filter="TestCategory!=Smoke&TestCategory!=Images&TestCategory!=Moderations&TestCategory!=Manual" + --logger "trx;LogFilePrefix=live" + --results-directory ${{ github.workspace }}/artifacts/test-results + ${{ env.version_suffix_args }} env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} - # Append the nuget package to the github release that triggered this workflow + - name: Upload artifact + uses: actions/upload-artifact@v4 + if: ${{ !cancelled() }} + with: + name: build-artifacts + path: ${{ github.workspace }}/artifacts + + deploy: + name: Publish Package + needs: build + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Download build artifacts + uses: actions/download-artifact@v4 + - name: Upload release asset + if: github.event_name == 'release' run: gh release upload ${{ github.event.release.tag_name }} - ${{github.workspace}}/artifacts/packages/*.*nupkg + ${{ github.workspace }}/build-artifacts/packages/*.*nupkg env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Upload artifact - uses: actions/upload-artifact@v2 - with: - name: build-artifacts - path: ${{github.workspace}}/artifacts + - name: NuGet authenticate + run: dotnet nuget add source + "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" + --name "github" + --username ${{ github.actor }} + --password ${{ secrets.GITHUB_TOKEN }} + --store-password-in-clear-text + + - name: Publish package to local feed + run: dotnet nuget push + ${{github.workspace}}/build-artifacts/packages/*.nupkg + --source "github" + --api-key ${{ secrets.GITHUB_TOKEN }} + --skip-duplicate - - name: Publish + - name: Publish package to nuget.org + if: github.event_name == 'release' run: dotnet nuget push - ${{github.workspace}}/artifacts/packages/*.nupkg - --source https://api.nuget.org/v3/index.json - --api-key ${{ secrets.NUGET_API_KEY }} - --skip-duplicate + ${{github.workspace}}/build-artifacts/packages/*.nupkg + --source https://api.nuget.org/v3/index.json + --api-key ${{ secrets.NUGET_API_KEY }} + --skip-duplicate diff --git a/CHANGELOG.md b/CHANGELOG.md index f744949bf..edf8529a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,18 +1,26 @@ # Release History -## 2.0.0-beta.8 (Unreleased) - -### Features Added +## 2.0.0-beta.8 (2024-07-31) ### Breaking Changes +- Changed name of return types from methods returning streaming collections from `ResultCollection` to `CollectionResult`. ([7bdecfd](https://github.com/openai/openai-dotnet/commit/7bdecfd8d294be933c7779c7e5b6435ba8a8eab0)) +- Changed return types from methods returning paginated collections from `PageableCollection` to `PageCollection`. ([7bdecfd](https://github.com/openai/openai-dotnet/commit/7bdecfd8d294be933c7779c7e5b6435ba8a8eab0)) +- Users must now call `GetAllValues` on the collection of pages to enumerate collection items directly. Corresponding protocol methods return `IEnumerable` where each collection item represents a single service response holding a page of values. ([7bdecfd](https://github.com/openai/openai-dotnet/commit/7bdecfd8d294be933c7779c7e5b6435ba8a8eab0)) +- Updated `VectorStoreFileCounts` and `VectorStoreFileAssociationError` types from `readonly struct` to `class`. ([58f93c8](https://github.com/openai/openai-dotnet/commit/58f93c8d5ea080adfee8b37ae3cc034ebb06c79f)) + ### Bugs Fixed -- ([#49](https://github.com/openai/openai-dotnet/issues/49)) Fixed a bug with extensible enums implementing case-insensitive equality but case-sensitive hash codes. (commit_hash) -- ([#57](https://github.com/openai/openai-dotnet/issues/57)) Fixed a bug with requests URIs with query string parameter potentially containing a malformed double question mark (`??`) on .NET Framework (net481). (commit_hash) +- ([#49](https://github.com/openai/openai-dotnet/issues/49)) Fixed a bug with extensible enums implementing case-insensitive equality but case-sensitive hash codes. ([0c12500](https://github.com/openai/openai-dotnet/commit/0c125002ffd791594597ef837f4d10582bdff004)) +- ([#57](https://github.com/openai/openai-dotnet/issues/57)) Fixed a bug with requests URIs with query string parameter potentially containing a malformed double question mark (`??`) on .NET Framework (net481). ([0c12500](https://github.com/openai/openai-dotnet/commit/0c125002ffd791594597ef837f4d10582bdff004)) +- Added optional `CancellationToken` parameters to methods for `AssistantClient` and `VectorStore` client, consistent with past changes in [19a65a0](https://github.com/openai/openai-dotnet/commit/19a65a0a943fa3bef1ec8504708aaa526a1ee03a). ([d77539c](https://github.com/openai/openai-dotnet/commit/d77539ca04467c166f848953eb866012a265555c)) +- Fixed Assistants `FileSearchToolDefinition`'s `MaxResults` parameter to appropriately serialize and deserialize the value ([d77539c](https://github.com/openai/openai-dotnet/commit/d77539ca04467c166f848953eb866012a265555c)) +- Added missing `[EditorBrowsable(EditorBrowsableState.Never)]` attributes to `AssistantClient` protocol methods, which should improve discoverability of the strongly typed methods. ([d77539c](https://github.com/openai/openai-dotnet/commit/d77539ca04467c166f848953eb866012a265555c)) ### Other Changes +- Removed the usage of `init` and updated properties to use `set`. ([58f93c8](https://github.com/openai/openai-dotnet/commit/58f93c8d5ea080adfee8b37ae3cc034ebb06c79f)) + ## 2.0.0-beta.7 (2024-06-24) ### Bugs Fixed diff --git a/OpenAI.sln b/OpenAI.sln index d6350d85f..d3c8d9784 100644 --- a/OpenAI.sln +++ b/OpenAI.sln @@ -6,7 +6,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenAI", "src\OpenAI.csproj EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenAI.Examples", "examples\OpenAI.Examples.csproj", "{1F1CD1D4-9932-4B73-99D8-C252A67D4B46}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenAI.Tests", "tests\OpenAI.Tests.csproj", "{6F156401-2544-41D7-B204-3148C51C1D09}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenAI.Tests", "tests\OpenAI.Tests.csproj", "{6F156401-2544-41D7-B204-3148C51C1D09}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.ClientModel", "..\azure-sdk-for-net\sdk\core\System.ClientModel\src\System.ClientModel.csproj", "{8316F2D5-21A7-468B-97DB-B14C44B4F50C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -26,6 +28,10 @@ Global {6F156401-2544-41D7-B204-3148C51C1D09}.Debug|Any CPU.Build.0 = Debug|Any CPU {6F156401-2544-41D7-B204-3148C51C1D09}.Release|Any CPU.ActiveCfg = Release|Any CPU {6F156401-2544-41D7-B204-3148C51C1D09}.Release|Any CPU.Build.0 = Release|Any CPU + {8316F2D5-21A7-468B-97DB-B14C44B4F50C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8316F2D5-21A7-468B-97DB-B14C44B4F50C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8316F2D5-21A7-468B-97DB-B14C44B4F50C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8316F2D5-21A7-468B-97DB-B14C44B4F50C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -33,4 +39,4 @@ Global GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A97F4B90-2591-4689-B1F8-5F21FE6D6CAE} EndGlobalSection -EndGlobal \ No newline at end of file +EndGlobal diff --git a/README.md b/README.md index 88e4b572c..4261ee73c 100644 --- a/README.md +++ b/README.md @@ -528,7 +528,8 @@ Finally, you can use the `AssistantClient`'s `GetMessages` method to retrieve th For illustrative purposes, you could print the messages to the console and also save any images produced by the assistant to local storage: ```csharp -PageCollection messages = assistantClient.GetMessages(threadRun.ThreadId, ListOrder.OldestFirst); +PageCollection messagePages = assistantClient.GetMessages(threadRun.ThreadId, new MessageCollectionOptions() { Order = ListOrder.OldestFirst }); +IEnumerable messages = messagePages.GetAllValues(); foreach (ThreadMessage message in messages) { diff --git a/api/api.md b/api/api.md index 3cf12f0dc..de4ad415e 100644 --- a/api/api.md +++ b/api/api.md @@ -42,147 +42,148 @@ namespace OpenAI { namespace OpenAI.Assistants { internal [Experimental("OPENAI001")] public class AssistantClient { - public AssistantClient(ApiKeyCredential credential, OpenAIClientOptions options = null); + protected AssistantClient(); public AssistantClient(OpenAIClientOptions options = null); + public AssistantClient(ApiKeyCredential credential, OpenAIClientOptions options = null); protected AssistantClient(ClientPipeline pipeline, Uri endpoint, OpenAIClientOptions options); - protected AssistantClient(); - public virtual ClientPipeline Pipeline { get; } public virtual ClientResult CancelRun(ThreadRun run); - public virtual ClientResult CancelRun(string threadId, string runId); public virtual ClientResult CancelRun(string threadId, string runId, RequestOptions options); + public virtual ClientResult CancelRun(string threadId, string runId, CancellationToken cancellationToken = default); public virtual Task> CancelRunAsync(ThreadRun run); - public virtual Task> CancelRunAsync(string threadId, string runId); public virtual Task CancelRunAsync(string threadId, string runId, RequestOptions options); - public virtual ClientResult CreateAssistant(string model, AssistantCreationOptions options = null); + public virtual Task> CancelRunAsync(string threadId, string runId, CancellationToken cancellationToken = default); + public virtual ClientResult CreateAssistant(string model, AssistantCreationOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult CreateAssistant(BinaryContent content, RequestOptions options = null); - public virtual Task> CreateAssistantAsync(string model, AssistantCreationOptions options = null); + public virtual Task> CreateAssistantAsync(string model, AssistantCreationOptions options = null, CancellationToken cancellationToken = default); public virtual Task CreateAssistantAsync(BinaryContent content, RequestOptions options = null); - public virtual ClientResult CreateMessage(AssistantThread thread, IEnumerable content, MessageCreationOptions options = null); - public virtual ClientResult CreateMessage(string threadId, IEnumerable content, MessageCreationOptions options = null); + public virtual ClientResult CreateMessage(AssistantThread thread, MessageRole role, IEnumerable content, MessageCreationOptions options = null); + public virtual ClientResult CreateMessage(string threadId, MessageRole role, IEnumerable content, MessageCreationOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult CreateMessage(string threadId, BinaryContent content, RequestOptions options = null); - public virtual Task> CreateMessageAsync(AssistantThread thread, IEnumerable content, MessageCreationOptions options = null); - public virtual Task> CreateMessageAsync(string threadId, IEnumerable content, MessageCreationOptions options = null); + public virtual Task> CreateMessageAsync(AssistantThread thread, MessageRole role, IEnumerable content, MessageCreationOptions options = null); + public virtual Task> CreateMessageAsync(string threadId, MessageRole role, IEnumerable content, MessageCreationOptions options = null, CancellationToken cancellationToken = default); public virtual Task CreateMessageAsync(string threadId, BinaryContent content, RequestOptions options = null); public virtual ClientResult CreateRun(AssistantThread thread, Assistant assistant, RunCreationOptions options = null); - public virtual ClientResult CreateRun(string threadId, string assistantId, RunCreationOptions options = null); + public virtual ClientResult CreateRun(string threadId, string assistantId, RunCreationOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult CreateRun(string threadId, BinaryContent content, RequestOptions options = null); public virtual Task> CreateRunAsync(AssistantThread thread, Assistant assistant, RunCreationOptions options = null); - public virtual Task> CreateRunAsync(string threadId, string assistantId, RunCreationOptions options = null); + public virtual Task> CreateRunAsync(string threadId, string assistantId, RunCreationOptions options = null, CancellationToken cancellationToken = default); public virtual Task CreateRunAsync(string threadId, BinaryContent content, RequestOptions options = null); public virtual ResultCollection CreateRunStreaming(AssistantThread thread, Assistant assistant, RunCreationOptions options = null); - public virtual ResultCollection CreateRunStreaming(string threadId, string assistantId, RunCreationOptions options = null); + public virtual ResultCollection CreateRunStreaming(string threadId, string assistantId, RunCreationOptions options = null, CancellationToken cancellationToken = default); public virtual AsyncResultCollection CreateRunStreamingAsync(AssistantThread thread, Assistant assistant, RunCreationOptions options = null); - public virtual AsyncResultCollection CreateRunStreamingAsync(string threadId, string assistantId, RunCreationOptions options = null); - public virtual ClientResult CreateThread(ThreadCreationOptions options = null); + public virtual AsyncResultCollection CreateRunStreamingAsync(string threadId, string assistantId, RunCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult CreateThread(ThreadCreationOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult CreateThread(BinaryContent content, RequestOptions options = null); public virtual ClientResult CreateThreadAndRun(Assistant assistant, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null); - public virtual ClientResult CreateThreadAndRun(string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null); + public virtual ClientResult CreateThreadAndRun(string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null, CancellationToken cancellationToken = default); public virtual ClientResult CreateThreadAndRun(BinaryContent content, RequestOptions options = null); public virtual Task> CreateThreadAndRunAsync(Assistant assistant, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null); - public virtual Task> CreateThreadAndRunAsync(string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null); + public virtual Task> CreateThreadAndRunAsync(string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null, CancellationToken cancellationToken = default); public virtual Task CreateThreadAndRunAsync(BinaryContent content, RequestOptions options = null); public virtual ResultCollection CreateThreadAndRunStreaming(Assistant assistant, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null); - public virtual ResultCollection CreateThreadAndRunStreaming(string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null); + public virtual ResultCollection CreateThreadAndRunStreaming(string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null, CancellationToken cancellationToken = default); public virtual AsyncResultCollection CreateThreadAndRunStreamingAsync(Assistant assistant, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null); - public virtual AsyncResultCollection CreateThreadAndRunStreamingAsync(string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null); - public virtual Task> CreateThreadAsync(ThreadCreationOptions options = null); + public virtual AsyncResultCollection CreateThreadAndRunStreamingAsync(string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null, CancellationToken cancellationToken = default); + public virtual Task> CreateThreadAsync(ThreadCreationOptions options = null, CancellationToken cancellationToken = default); public virtual Task CreateThreadAsync(BinaryContent content, RequestOptions options = null); public virtual ClientResult DeleteAssistant(Assistant assistant); - public virtual ClientResult DeleteAssistant(string assistantId); public virtual ClientResult DeleteAssistant(string assistantId, RequestOptions options); + public virtual ClientResult DeleteAssistant(string assistantId, CancellationToken cancellationToken = default); public virtual Task> DeleteAssistantAsync(Assistant assistant); - public virtual Task> DeleteAssistantAsync(string assistantId); public virtual Task DeleteAssistantAsync(string assistantId, RequestOptions options); + public virtual Task> DeleteAssistantAsync(string assistantId, CancellationToken cancellationToken = default); + public virtual ClientResult DeleteMessage(ThreadMessage message); - public virtual ClientResult DeleteMessage(string threadId, string messageId); public virtual ClientResult DeleteMessage(string threadId, string messageId, RequestOptions options); + public virtual ClientResult DeleteMessage(string threadId, string messageId, CancellationToken cancellationToken = default); public virtual Task> DeleteMessageAsync(ThreadMessage message); - public virtual Task> DeleteMessageAsync(string threadId, string messageId); public virtual Task DeleteMessageAsync(string threadId, string messageId, RequestOptions options); + public virtual Task> DeleteMessageAsync(string threadId, string messageId, CancellationToken cancellationToken = default); public virtual ClientResult DeleteThread(AssistantThread thread); - public virtual ClientResult DeleteThread(string threadId); public virtual ClientResult DeleteThread(string threadId, RequestOptions options); + public virtual ClientResult DeleteThread(string threadId, CancellationToken cancellationToken = default); public virtual Task> DeleteThreadAsync(AssistantThread thread); - public virtual Task> DeleteThreadAsync(string threadId); public virtual Task DeleteThreadAsync(string threadId, RequestOptions options); + public virtual Task> DeleteThreadAsync(string threadId, CancellationToken cancellationToken = default); public virtual ClientResult GetAssistant(string assistantId, RequestOptions options); - public virtual ClientResult GetAssistant(string assistantId); + public virtual ClientResult GetAssistant(string assistantId, CancellationToken cancellationToken = default); public virtual Task GetAssistantAsync(string assistantId, RequestOptions options); - public virtual Task> GetAssistantAsync(string assistantId); - public virtual PageableCollection GetAssistants(ListOrder? resultOrder = null); + public virtual Task> GetAssistantAsync(string assistantId, CancellationToken cancellationToken = default); public virtual ClientResult GetAssistants(int? limit, string order, string after, string before, RequestOptions options); - public virtual AsyncPageableCollection GetAssistantsAsync(ListOrder? resultOrder = null); + public virtual PageableCollection GetAssistants(ListOrder? resultOrder = null, CancellationToken cancellationToken = default); public virtual Task GetAssistantsAsync(int? limit, string order, string after, string before, RequestOptions options); + public virtual AsyncPageableCollection GetAssistantsAsync(ListOrder? resultOrder = null, CancellationToken cancellationToken = default); public virtual ClientResult GetMessage(ThreadMessage message); - public virtual ClientResult GetMessage(string threadId, string messageId); public virtual ClientResult GetMessage(string threadId, string messageId, RequestOptions options); + public virtual ClientResult GetMessage(string threadId, string messageId, CancellationToken cancellationToken = default); public virtual Task> GetMessageAsync(ThreadMessage message); - public virtual Task> GetMessageAsync(string threadId, string messageId); public virtual Task GetMessageAsync(string threadId, string messageId, RequestOptions options); + public virtual Task> GetMessageAsync(string threadId, string messageId, CancellationToken cancellationToken = default); public virtual PageableCollection GetMessages(AssistantThread thread, ListOrder? resultOrder = null); - public virtual PageableCollection GetMessages(string threadId, ListOrder? resultOrder = null); public virtual ClientResult GetMessages(string threadId, int? limit, string order, string after, string before, RequestOptions options); + public virtual PageableCollection GetMessages(string threadId, ListOrder? resultOrder = null, CancellationToken cancellationToken = default); public virtual AsyncPageableCollection GetMessagesAsync(AssistantThread thread, ListOrder? resultOrder = null); - public virtual AsyncPageableCollection GetMessagesAsync(string threadId, ListOrder? resultOrder = null); public virtual Task GetMessagesAsync(string threadId, int? limit, string order, string after, string before, RequestOptions options); + public virtual AsyncPageableCollection GetMessagesAsync(string threadId, ListOrder? resultOrder = null, CancellationToken cancellationToken = default); public virtual ClientResult GetRun(ThreadRun run); - public virtual ClientResult GetRun(string threadId, string runId); public virtual ClientResult GetRun(string threadId, string runId, RequestOptions options); + public virtual ClientResult GetRun(string threadId, string runId, CancellationToken cancellationToken = default); public virtual Task> GetRunAsync(ThreadRun run); - public virtual Task> GetRunAsync(string threadId, string runId); public virtual Task GetRunAsync(string threadId, string runId, RequestOptions options); + public virtual Task> GetRunAsync(string threadId, string runId, CancellationToken cancellationToken = default); public virtual PageableCollection GetRuns(AssistantThread thread, ListOrder? resultOrder = null); - public virtual PageableCollection GetRuns(string threadId, ListOrder? resultOrder = null); public virtual ClientResult GetRuns(string threadId, int? limit, string order, string after, string before, RequestOptions options); + public virtual PageableCollection GetRuns(string threadId, ListOrder? resultOrder = null, CancellationToken cancellationToken = default); public virtual AsyncPageableCollection GetRunsAsync(AssistantThread thread, ListOrder? resultOrder = null); - public virtual AsyncPageableCollection GetRunsAsync(string threadId, ListOrder? resultOrder = null); public virtual Task GetRunsAsync(string threadId, int? limit, string order, string after, string before, RequestOptions options); - public virtual ClientResult GetRunStep(string threadId, string runId, string stepId); + public virtual AsyncPageableCollection GetRunsAsync(string threadId, ListOrder? resultOrder = null, CancellationToken cancellationToken = default); public virtual ClientResult GetRunStep(string threadId, string runId, string stepId, RequestOptions options); - public virtual Task> GetRunStepAsync(string threadId, string runId, string stepId); + public virtual ClientResult GetRunStep(string threadId, string runId, string stepId, CancellationToken cancellationToken = default); public virtual Task GetRunStepAsync(string threadId, string runId, string stepId, RequestOptions options); + public virtual Task> GetRunStepAsync(string threadId, string runId, string stepId, CancellationToken cancellationToken = default); public virtual PageableCollection GetRunSteps(ThreadRun run, ListOrder? resultOrder = null); - public virtual PageableCollection GetRunSteps(string threadId, string runId, ListOrder? resultOrder = null); public virtual ClientResult GetRunSteps(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options); + public virtual PageableCollection GetRunSteps(string threadId, string runId, ListOrder? resultOrder = null, CancellationToken cancellationToken = default); public virtual AsyncPageableCollection GetRunStepsAsync(ThreadRun run, ListOrder? resultOrder = null); - public virtual AsyncPageableCollection GetRunStepsAsync(string threadId, string runId, ListOrder? resultOrder = null); public virtual Task GetRunStepsAsync(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options); + public virtual AsyncPageableCollection GetRunStepsAsync(string threadId, string runId, ListOrder? resultOrder = null, CancellationToken cancellationToken = default); public virtual ClientResult GetThread(AssistantThread thread); - public virtual ClientResult GetThread(string threadId); public virtual ClientResult GetThread(string threadId, RequestOptions options); + public virtual ClientResult GetThread(string threadId, CancellationToken cancellationToken = default); public virtual Task> GetThreadAsync(AssistantThread thread); - public virtual Task> GetThreadAsync(string threadId); public virtual Task GetThreadAsync(string threadId, RequestOptions options); + public virtual Task> GetThreadAsync(string threadId, CancellationToken cancellationToken = default); public virtual ClientResult ModifyAssistant(Assistant assistant, AssistantModificationOptions options); + public virtual ClientResult ModifyAssistant(string assistantId, AssistantModificationOptions options, CancellationToken cancellationToken = default); public virtual ClientResult ModifyAssistant(string assistantId, BinaryContent content, RequestOptions options = null); - public virtual ClientResult ModifyAssistant(string assistantId, AssistantModificationOptions assistant); public virtual Task> ModifyAssistantAsync(Assistant assistant, AssistantModificationOptions options); + public virtual Task> ModifyAssistantAsync(string assistantId, AssistantModificationOptions options, CancellationToken cancellationToken = default); public virtual Task ModifyAssistantAsync(string assistantId, BinaryContent content, RequestOptions options = null); - public virtual Task> ModifyAssistantAsync(string assistantId, AssistantModificationOptions assistant); public virtual ClientResult ModifyMessage(ThreadMessage message, MessageModificationOptions options); - public virtual ClientResult ModifyMessage(string threadId, string messageId, MessageModificationOptions options); + public virtual ClientResult ModifyMessage(string threadId, string messageId, MessageModificationOptions options, CancellationToken cancellationToken = default); public virtual ClientResult ModifyMessage(string threadId, string messageId, BinaryContent content, RequestOptions options = null); public virtual Task> ModifyMessageAsync(ThreadMessage message, MessageModificationOptions options); - public virtual Task> ModifyMessageAsync(string threadId, string messageId, MessageModificationOptions options); + public virtual Task> ModifyMessageAsync(string threadId, string messageId, MessageModificationOptions options, CancellationToken cancellationToken = default); public virtual Task ModifyMessageAsync(string threadId, string messageId, BinaryContent content, RequestOptions options = null); public virtual ClientResult ModifyRun(string threadId, string runId, BinaryContent content, RequestOptions options = null); public virtual Task ModifyRunAsync(string threadId, string runId, BinaryContent content, RequestOptions options = null); public virtual ClientResult ModifyThread(AssistantThread thread, ThreadModificationOptions options); - public virtual ClientResult ModifyThread(string threadId, ThreadModificationOptions options); + public virtual ClientResult ModifyThread(string threadId, ThreadModificationOptions options, CancellationToken cancellationToken = default); public virtual ClientResult ModifyThread(string threadId, BinaryContent content, RequestOptions options = null); public virtual Task> ModifyThreadAsync(AssistantThread thread, ThreadModificationOptions options); - public virtual Task> ModifyThreadAsync(string threadId, ThreadModificationOptions options); + public virtual Task> ModifyThreadAsync(string threadId, ThreadModificationOptions options, CancellationToken cancellationToken = default); public virtual Task ModifyThreadAsync(string threadId, BinaryContent content, RequestOptions options = null); + public virtual ClientPipeline Pipeline { get; } public virtual ClientResult SubmitToolOutputsToRun(ThreadRun run, IEnumerable toolOutputs); - public virtual ClientResult SubmitToolOutputsToRun(string threadId, string runId, IEnumerable toolOutputs); public virtual ClientResult SubmitToolOutputsToRun(string threadId, string runId, BinaryContent content, RequestOptions options = null); + public virtual ClientResult SubmitToolOutputsToRun(string threadId, string runId, IEnumerable toolOutputs, CancellationToken cancellationToken = default); public virtual Task> SubmitToolOutputsToRunAsync(ThreadRun run, IEnumerable toolOutputs); - public virtual Task> SubmitToolOutputsToRunAsync(string threadId, string runId, IEnumerable toolOutputs); public virtual Task SubmitToolOutputsToRunAsync(string threadId, string runId, BinaryContent content, RequestOptions options = null); + public virtual Task> SubmitToolOutputsToRunAsync(string threadId, string runId, IEnumerable toolOutputs, CancellationToken cancellationToken = default); public virtual ResultCollection SubmitToolOutputsToRunStreaming(ThreadRun run, IEnumerable toolOutputs); - public virtual ResultCollection SubmitToolOutputsToRunStreaming(string threadId, string runId, IEnumerable toolOutputs); + public virtual ResultCollection SubmitToolOutputsToRunStreaming(string threadId, string runId, IEnumerable toolOutputs, CancellationToken cancellationToken = default); public virtual AsyncResultCollection SubmitToolOutputsToRunStreamingAsync(ThreadRun run, IEnumerable toolOutputs); - public virtual AsyncResultCollection SubmitToolOutputsToRunStreamingAsync(string threadId, string runId, IEnumerable toolOutputs); + public virtual AsyncResultCollection SubmitToolOutputsToRunStreamingAsync(string threadId, string runId, IEnumerable toolOutputs, CancellationToken cancellationToken = default); } public class AssistantCreationOptions { public AssistantCreationOptions(); @@ -286,6 +287,7 @@ namespace OpenAI.Assistants { } public class CodeInterpreterToolDefinition : ToolDefinition { public CodeInterpreterToolDefinition(); + protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); } public class CodeInterpreterToolResources { public CodeInterpreterToolResources(); @@ -294,6 +296,7 @@ namespace OpenAI.Assistants { public class FileSearchToolDefinition : ToolDefinition { public FileSearchToolDefinition(); public int? MaxResults { get; init; } + protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); } public class FileSearchToolResources { public FileSearchToolResources(); @@ -307,6 +310,7 @@ namespace OpenAI.Assistants { public string Description { get; init; } public required string FunctionName { get; init; } public BinaryData Parameters { get; init; } + protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); } public abstract class MessageContent { protected MessageContent(); @@ -319,6 +323,7 @@ namespace OpenAI.Assistants { public static MessageContent FromImageUrl(Uri imageUri, MessageImageDetail? detail = null); public static MessageContent FromText(string text); public static implicit operator MessageContent(string value); + protected abstract void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); } public class MessageContentUpdate : StreamingUpdate { public MessageImageDetail? ImageDetail { get; } @@ -641,6 +646,7 @@ namespace OpenAI.Assistants { public static CodeInterpreterToolDefinition CreateCodeInterpreter(); public static FileSearchToolDefinition CreateFileSearch(int? maxResults = null); public static FunctionToolDefinition CreateFunction(string name, string description = null, BinaryData parameters = null); + protected abstract void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); } public class ToolOutput { public ToolOutput(string toolCallId, string output); @@ -711,20 +717,20 @@ namespace OpenAI.Audio { protected AudioClient(ClientPipeline pipeline, string model, Uri endpoint, OpenAIClientOptions options); protected AudioClient(); public virtual ClientPipeline Pipeline { get; } - public virtual ClientResult GenerateSpeechFromText(string text, GeneratedSpeechVoice voice, SpeechGenerationOptions options = null); + public virtual ClientResult GenerateSpeechFromText(string text, GeneratedSpeechVoice voice, SpeechGenerationOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult GenerateSpeechFromText(BinaryContent content, RequestOptions options = null); - public virtual Task> GenerateSpeechFromTextAsync(string text, GeneratedSpeechVoice voice, SpeechGenerationOptions options = null); + public virtual Task> GenerateSpeechFromTextAsync(string text, GeneratedSpeechVoice voice, SpeechGenerationOptions options = null, CancellationToken cancellationToken = default); public virtual Task GenerateSpeechFromTextAsync(BinaryContent content, RequestOptions options = null); - public virtual ClientResult TranscribeAudio(Stream audio, string audioFilename, AudioTranscriptionOptions options = null); + public virtual ClientResult TranscribeAudio(Stream audio, string audioFilename, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult TranscribeAudio(string audioFilePath, AudioTranscriptionOptions options = null); public virtual ClientResult TranscribeAudio(BinaryContent content, string contentType, RequestOptions options = null); - public virtual Task> TranscribeAudioAsync(Stream audio, string audioFilename, AudioTranscriptionOptions options = null); + public virtual Task> TranscribeAudioAsync(Stream audio, string audioFilename, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default); public virtual Task> TranscribeAudioAsync(string audioFilePath, AudioTranscriptionOptions options = null); public virtual Task TranscribeAudioAsync(BinaryContent content, string contentType, RequestOptions options = null); - public virtual ClientResult TranslateAudio(Stream audio, string audioFilename, AudioTranslationOptions options = null); + public virtual ClientResult TranslateAudio(Stream audio, string audioFilename, AudioTranslationOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult TranslateAudio(string audioFilePath, AudioTranslationOptions options = null); public virtual ClientResult TranslateAudio(BinaryContent content, string contentType, RequestOptions options = null); - public virtual Task> TranslateAudioAsync(Stream audio, string audioFilename, AudioTranslationOptions options = null); + public virtual Task> TranslateAudioAsync(Stream audio, string audioFilename, AudioTranslationOptions options = null, CancellationToken cancellationToken = default); public virtual Task> TranslateAudioAsync(string audioFilePath, AudioTranslationOptions options = null); public virtual Task TranslateAudioAsync(BinaryContent content, string contentType, RequestOptions options = null); } @@ -840,15 +846,15 @@ namespace OpenAI.Chat { protected ChatClient(ClientPipeline pipeline, string model, Uri endpoint, OpenAIClientOptions options); protected ChatClient(); public virtual ClientPipeline Pipeline { get; } - public virtual ClientResult CompleteChat(IEnumerable messages, ChatCompletionOptions options = null); + public virtual ClientResult CompleteChat(IEnumerable messages, ChatCompletionOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult CompleteChat(params ChatMessage[] messages); public virtual ClientResult CompleteChat(BinaryContent content, RequestOptions options = null); - public virtual Task> CompleteChatAsync(IEnumerable messages, ChatCompletionOptions options = null); + public virtual Task> CompleteChatAsync(IEnumerable messages, ChatCompletionOptions options = null, CancellationToken cancellationToken = default); public virtual Task> CompleteChatAsync(params ChatMessage[] messages); public virtual Task CompleteChatAsync(BinaryContent content, RequestOptions options = null); - public virtual ResultCollection CompleteChatStreaming(IEnumerable messages, ChatCompletionOptions options = null); + public virtual ResultCollection CompleteChatStreaming(IEnumerable messages, ChatCompletionOptions options = null, CancellationToken cancellationToken = default); public virtual ResultCollection CompleteChatStreaming(params ChatMessage[] messages); - public virtual AsyncResultCollection CompleteChatStreamingAsync(IEnumerable messages, ChatCompletionOptions options = null); + public virtual AsyncResultCollection CompleteChatStreamingAsync(IEnumerable messages, ChatCompletionOptions options = null, CancellationToken cancellationToken = default); public virtual AsyncResultCollection CompleteChatStreamingAsync(params ChatMessage[] messages); } public class ChatCompletionOptions { @@ -879,6 +885,7 @@ namespace OpenAI.Chat { public ChatFunctionCall FunctionCall { get; init; } public string ParticipantName { get; init; } public IList ToolCalls { get; } + protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); } public class ChatCompletion { public IReadOnlyList Content { get; } @@ -925,6 +932,7 @@ namespace OpenAI.Chat { public static UserChatMessage CreateUserMessage(IEnumerable contentParts); public static UserChatMessage CreateUserMessage(params ChatMessageContentPart[] contentParts); public static implicit operator ChatMessage(string userMessage); + protected abstract void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); } public class ChatMessageContentPart { public BinaryData ImageBytes { get; } @@ -1017,6 +1025,7 @@ namespace OpenAI.Chat { public class FunctionChatMessage : ChatMessage { public FunctionChatMessage(string functionName, string content = null); public string FunctionName { get; } + protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); } public readonly struct ImageChatMessageContentPartDetail : IEquatable { public ImageChatMessageContentPartDetail(string value); @@ -1058,16 +1067,19 @@ namespace OpenAI.Chat { public class SystemChatMessage : ChatMessage { public SystemChatMessage(string content); public string ParticipantName { get; init; } + protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); } public class ToolChatMessage : ChatMessage { public ToolChatMessage(string toolCallId, string content); public string ToolCallId { get; } + protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); } public class UserChatMessage : ChatMessage { public UserChatMessage(string content); public UserChatMessage(IEnumerable content); public UserChatMessage(params ChatMessageContentPart[] content); public string ParticipantName { get; init; } + protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); } public enum ChatFinishReason { Stop = 0, @@ -1091,13 +1103,13 @@ namespace OpenAI.Embeddings { protected EmbeddingClient(ClientPipeline pipeline, string model, Uri endpoint, OpenAIClientOptions options); protected EmbeddingClient(); public virtual ClientPipeline Pipeline { get; } - public virtual ClientResult GenerateEmbedding(string input, EmbeddingGenerationOptions options = null); - public virtual Task> GenerateEmbeddingAsync(string input, EmbeddingGenerationOptions options = null); - public virtual ClientResult GenerateEmbeddings(IEnumerable inputs, EmbeddingGenerationOptions options = null); - public virtual ClientResult GenerateEmbeddings(IEnumerable> inputs, EmbeddingGenerationOptions options = null); + public virtual ClientResult GenerateEmbedding(string input, EmbeddingGenerationOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> GenerateEmbeddingAsync(string input, EmbeddingGenerationOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult GenerateEmbeddings(IEnumerable inputs, EmbeddingGenerationOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult GenerateEmbeddings(IEnumerable> inputs, EmbeddingGenerationOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult GenerateEmbeddings(BinaryContent content, RequestOptions options = null); - public virtual Task> GenerateEmbeddingsAsync(IEnumerable inputs, EmbeddingGenerationOptions options = null); - public virtual Task> GenerateEmbeddingsAsync(IEnumerable> inputs, EmbeddingGenerationOptions options = null); + public virtual Task> GenerateEmbeddingsAsync(IEnumerable inputs, EmbeddingGenerationOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> GenerateEmbeddingsAsync(IEnumerable> inputs, EmbeddingGenerationOptions options = null, CancellationToken cancellationToken = default); public virtual Task GenerateEmbeddingsAsync(BinaryContent content, RequestOptions options = null); } public class EmbeddingGenerationOptions { @@ -1125,31 +1137,31 @@ namespace OpenAI.Files { protected FileClient(ClientPipeline pipeline, Uri endpoint, OpenAIClientOptions options); protected FileClient(); public virtual ClientPipeline Pipeline { get; } - public virtual ClientResult DeleteFile(string fileId); + public virtual ClientResult DeleteFile(string fileId, CancellationToken cancellationToken = default); public virtual ClientResult DeleteFile(OpenAIFileInfo file); public virtual ClientResult DeleteFile(string fileId, RequestOptions options); - public virtual Task> DeleteFileAsync(string fileId); + public virtual Task> DeleteFileAsync(string fileId, CancellationToken cancellationToken = default); public virtual Task> DeleteFileAsync(OpenAIFileInfo file); public virtual Task DeleteFileAsync(string fileId, RequestOptions options); - public virtual ClientResult DownloadFile(string fileId); + public virtual ClientResult DownloadFile(string fileId, CancellationToken cancellationToken = default); public virtual ClientResult DownloadFile(OpenAIFileInfo file); public virtual ClientResult DownloadFile(string fileId, RequestOptions options); - public virtual Task> DownloadFileAsync(string fileId); + public virtual Task> DownloadFileAsync(string fileId, CancellationToken cancellationToken = default); public virtual Task> DownloadFileAsync(OpenAIFileInfo file); public virtual Task DownloadFileAsync(string fileId, RequestOptions options); - public virtual ClientResult GetFile(string fileId); + public virtual ClientResult GetFile(string fileId, CancellationToken cancellationToken = default); public virtual ClientResult GetFile(string fileId, RequestOptions options); - public virtual Task> GetFileAsync(string fileId); + public virtual Task> GetFileAsync(string fileId, CancellationToken cancellationToken = default); public virtual Task GetFileAsync(string fileId, RequestOptions options); - public virtual ClientResult GetFiles(OpenAIFilePurpose? purpose = null); + public virtual ClientResult GetFiles(OpenAIFilePurpose? purpose = null, CancellationToken cancellationToken = default); public virtual ClientResult GetFiles(string purpose, RequestOptions options); - public virtual Task> GetFilesAsync(OpenAIFilePurpose? purpose = null); + public virtual Task> GetFilesAsync(OpenAIFilePurpose? purpose = null, CancellationToken cancellationToken = default); public virtual Task GetFilesAsync(string purpose, RequestOptions options); - public virtual ClientResult UploadFile(Stream file, string filename, FileUploadPurpose purpose); + public virtual ClientResult UploadFile(Stream file, string filename, FileUploadPurpose purpose, CancellationToken cancellationToken = default); public virtual ClientResult UploadFile(BinaryData file, string filename, FileUploadPurpose purpose); public virtual ClientResult UploadFile(string filePath, FileUploadPurpose purpose); public virtual ClientResult UploadFile(BinaryContent content, string contentType, RequestOptions options = null); - public virtual Task> UploadFileAsync(Stream file, string filename, FileUploadPurpose purpose); + public virtual Task> UploadFileAsync(Stream file, string filename, FileUploadPurpose purpose, CancellationToken cancellationToken = default); public virtual Task> UploadFileAsync(BinaryData file, string filename, FileUploadPurpose purpose); public virtual Task> UploadFileAsync(string filePath, FileUploadPurpose purpose); public virtual Task UploadFileAsync(BinaryContent content, string contentType, RequestOptions options = null); @@ -1238,38 +1250,38 @@ namespace OpenAI.Images { protected ImageClient(ClientPipeline pipeline, string model, Uri endpoint, OpenAIClientOptions options); protected ImageClient(); public virtual ClientPipeline Pipeline { get; } - public virtual ClientResult GenerateImage(string prompt, ImageGenerationOptions options = null); - public virtual Task> GenerateImageAsync(string prompt, ImageGenerationOptions options = null); - public virtual ClientResult GenerateImageEdit(Stream image, string imageFilename, string prompt, ImageEditOptions options = null); + public virtual ClientResult GenerateImage(string prompt, ImageGenerationOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> GenerateImageAsync(string prompt, ImageGenerationOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult GenerateImageEdit(Stream image, string imageFilename, string prompt, ImageEditOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult GenerateImageEdit(string imageFilePath, string prompt, ImageEditOptions options = null); - public virtual ClientResult GenerateImageEdit(Stream image, string imageFilename, string prompt, Stream mask, string maskFilename, ImageEditOptions options = null); + public virtual ClientResult GenerateImageEdit(Stream image, string imageFilename, string prompt, Stream mask, string maskFilename, ImageEditOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult GenerateImageEdit(string imageFilePath, string prompt, string maskFilePath, ImageEditOptions options = null); - public virtual Task> GenerateImageEditAsync(Stream image, string imageFilename, string prompt, ImageEditOptions options = null); + public virtual Task> GenerateImageEditAsync(Stream image, string imageFilename, string prompt, ImageEditOptions options = null, CancellationToken cancellationToken = default); public virtual Task> GenerateImageEditAsync(string imageFilePath, string prompt, ImageEditOptions options = null); - public virtual Task> GenerateImageEditAsync(Stream image, string imageFilename, string prompt, Stream mask, string maskFilename, ImageEditOptions options = null); + public virtual Task> GenerateImageEditAsync(Stream image, string imageFilename, string prompt, Stream mask, string maskFilename, ImageEditOptions options = null, CancellationToken cancellationToken = default); public virtual Task> GenerateImageEditAsync(string imageFilePath, string prompt, string maskFilePath, ImageEditOptions options = null); - public virtual ClientResult GenerateImageEdits(Stream image, string imageFilename, string prompt, int imageCount, ImageEditOptions options = null); + public virtual ClientResult GenerateImageEdits(Stream image, string imageFilename, string prompt, int imageCount, ImageEditOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult GenerateImageEdits(string imageFilePath, string prompt, int imageCount, ImageEditOptions options = null); - public virtual ClientResult GenerateImageEdits(Stream image, string imageFilename, string prompt, Stream mask, string maskFilename, int imageCount, ImageEditOptions options = null); + public virtual ClientResult GenerateImageEdits(Stream image, string imageFilename, string prompt, Stream mask, string maskFilename, int imageCount, ImageEditOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult GenerateImageEdits(string imageFilePath, string prompt, string maskFilePath, int imageCount, ImageEditOptions options = null); public virtual ClientResult GenerateImageEdits(BinaryContent content, string contentType, RequestOptions options = null); - public virtual Task> GenerateImageEditsAsync(Stream image, string imageFilename, string prompt, int imageCount, ImageEditOptions options = null); + public virtual Task> GenerateImageEditsAsync(Stream image, string imageFilename, string prompt, int imageCount, ImageEditOptions options = null, CancellationToken cancellationToken = default); public virtual Task> GenerateImageEditsAsync(string imageFilePath, string prompt, int imageCount, ImageEditOptions options = null); - public virtual Task> GenerateImageEditsAsync(Stream image, string imageFilename, string prompt, Stream mask, string maskFilename, int imageCount, ImageEditOptions options = null); + public virtual Task> GenerateImageEditsAsync(Stream image, string imageFilename, string prompt, Stream mask, string maskFilename, int imageCount, ImageEditOptions options = null, CancellationToken cancellationToken = default); public virtual Task> GenerateImageEditsAsync(string imageFilePath, string prompt, string maskFilePath, int imageCount, ImageEditOptions options = null); public virtual Task GenerateImageEditsAsync(BinaryContent content, string contentType, RequestOptions options = null); - public virtual ClientResult GenerateImages(string prompt, int imageCount, ImageGenerationOptions options = null); + public virtual ClientResult GenerateImages(string prompt, int imageCount, ImageGenerationOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult GenerateImages(BinaryContent content, RequestOptions options = null); - public virtual Task> GenerateImagesAsync(string prompt, int imageCount, ImageGenerationOptions options = null); + public virtual Task> GenerateImagesAsync(string prompt, int imageCount, ImageGenerationOptions options = null, CancellationToken cancellationToken = default); public virtual Task GenerateImagesAsync(BinaryContent content, RequestOptions options = null); - public virtual ClientResult GenerateImageVariation(Stream image, string imageFilename, ImageVariationOptions options = null); + public virtual ClientResult GenerateImageVariation(Stream image, string imageFilename, ImageVariationOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult GenerateImageVariation(string imageFilePath, ImageVariationOptions options = null); - public virtual Task> GenerateImageVariationAsync(Stream image, string imageFilename, ImageVariationOptions options = null); + public virtual Task> GenerateImageVariationAsync(Stream image, string imageFilename, ImageVariationOptions options = null, CancellationToken cancellationToken = default); public virtual Task> GenerateImageVariationAsync(string imageFilePath, ImageVariationOptions options = null); - public virtual ClientResult GenerateImageVariations(Stream image, string imageFilename, int imageCount, ImageVariationOptions options = null); + public virtual ClientResult GenerateImageVariations(Stream image, string imageFilename, int imageCount, ImageVariationOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult GenerateImageVariations(string imageFilePath, int imageCount, ImageVariationOptions options = null); public virtual ClientResult GenerateImageVariations(BinaryContent content, string contentType, RequestOptions options = null); - public virtual Task> GenerateImageVariationsAsync(Stream image, string imageFilename, int imageCount, ImageVariationOptions options = null); + public virtual Task> GenerateImageVariationsAsync(Stream image, string imageFilename, int imageCount, ImageVariationOptions options = null, CancellationToken cancellationToken = default); public virtual Task> GenerateImageVariationsAsync(string imageFilePath, int imageCount, ImageVariationOptions options = null); public virtual Task GenerateImageVariationsAsync(BinaryContent content, string contentType, RequestOptions options = null); } @@ -1364,11 +1376,11 @@ namespace OpenAI.Moderations { protected ModerationClient(ClientPipeline pipeline, string model, Uri endpoint, OpenAIClientOptions options); protected ModerationClient(); public virtual ClientPipeline Pipeline { get; } - public virtual ClientResult ClassifyTextInput(string input); - public virtual Task> ClassifyTextInputAsync(string input); - public virtual ClientResult ClassifyTextInputs(IEnumerable inputs); + public virtual ClientResult ClassifyTextInput(string input, CancellationToken cancellationToken = default); + public virtual Task> ClassifyTextInputAsync(string input, CancellationToken cancellationToken = default); + public virtual ClientResult ClassifyTextInputs(IEnumerable inputs, CancellationToken cancellationToken = default); public virtual ClientResult ClassifyTextInputs(BinaryContent content, RequestOptions options = null); - public virtual Task> ClassifyTextInputsAsync(IEnumerable inputs); + public virtual Task> ClassifyTextInputsAsync(IEnumerable inputs, CancellationToken cancellationToken = default); public virtual Task ClassifyTextInputsAsync(BinaryContent content, RequestOptions options = null); } public class ModerationCategories { @@ -1410,85 +1422,86 @@ namespace OpenAI.Moderations { namespace OpenAI.VectorStores { internal [Experimental("OPENAI001")] public class VectorStoreClient { - public VectorStoreClient(ApiKeyCredential credential, OpenAIClientOptions options = null); - public VectorStoreClient(OpenAIClientOptions options = null); - protected VectorStoreClient(ClientPipeline pipeline, Uri endpoint, OpenAIClientOptions options); - protected VectorStoreClient(); - public virtual ClientPipeline Pipeline { get; } public virtual ClientResult AddFileToVectorStore(VectorStore vectorStore, OpenAIFileInfo file); - public virtual ClientResult AddFileToVectorStore(string vectorStoreId, string fileId); + public virtual ClientResult AddFileToVectorStore(string vectorStoreId, string fileId, CancellationToken cancellationToken = default); public virtual ClientResult AddFileToVectorStore(string vectorStoreId, BinaryContent content, RequestOptions options = null); public virtual Task> AddFileToVectorStoreAsync(VectorStore vectorStore, OpenAIFileInfo file); - public virtual Task> AddFileToVectorStoreAsync(string vectorStoreId, string fileId); + public virtual Task> AddFileToVectorStoreAsync(string vectorStoreId, string fileId, CancellationToken cancellationToken = default); public virtual Task AddFileToVectorStoreAsync(string vectorStoreId, BinaryContent content, RequestOptions options = null); public virtual ClientResult CancelBatchFileJob(VectorStoreBatchFileJob batchJob); - public virtual ClientResult CancelBatchFileJob(string vectorStoreId, string batchJobId); public virtual ClientResult CancelBatchFileJob(string vectorStoreId, string batchId, RequestOptions options); + public virtual ClientResult CancelBatchFileJob(string vectorStoreId, string batchJobId, CancellationToken cancellationToken = default); public virtual Task> CancelBatchFileJobAsync(VectorStoreBatchFileJob batchJob); - public virtual Task> CancelBatchFileJobAsync(string vectorStoreId, string batchJobId); public virtual Task CancelBatchFileJobAsync(string vectorStoreId, string batchId, RequestOptions options); + public virtual Task> CancelBatchFileJobAsync(string vectorStoreId, string batchJobId, CancellationToken cancellationToken = default); public virtual ClientResult CreateBatchFileJob(VectorStore vectorStore, IEnumerable files); - public virtual ClientResult CreateBatchFileJob(string vectorStoreId, IEnumerable fileIds); public virtual ClientResult CreateBatchFileJob(string vectorStoreId, BinaryContent content, RequestOptions options = null); + public virtual ClientResult CreateBatchFileJob(string vectorStoreId, IEnumerable fileIds, CancellationToken cancellationToken = default); public virtual Task> CreateBatchFileJobAsync(VectorStore vectorStore, IEnumerable files); - public virtual Task> CreateBatchFileJobAsync(string vectorStoreId, IEnumerable fileIds); public virtual Task CreateBatchFileJobAsync(string vectorStoreId, BinaryContent content, RequestOptions options = null); - public virtual ClientResult CreateVectorStore(VectorStoreCreationOptions vectorStore = null); + public virtual Task> CreateBatchFileJobAsync(string vectorStoreId, IEnumerable fileIds, CancellationToken cancellationToken = default); + public virtual ClientResult CreateVectorStore(VectorStoreCreationOptions vectorStore = null, CancellationToken cancellationToken = default); public virtual ClientResult CreateVectorStore(BinaryContent content, RequestOptions options = null); - public virtual Task> CreateVectorStoreAsync(VectorStoreCreationOptions vectorStore = null); + public virtual Task> CreateVectorStoreAsync(VectorStoreCreationOptions vectorStore = null, CancellationToken cancellationToken = default); public virtual Task CreateVectorStoreAsync(BinaryContent content, RequestOptions options = null); public virtual ClientResult DeleteVectorStore(VectorStore vectorStore); - public virtual ClientResult DeleteVectorStore(string vectorStoreId); public virtual ClientResult DeleteVectorStore(string vectorStoreId, RequestOptions options); + public virtual ClientResult DeleteVectorStore(string vectorStoreId, CancellationToken cancellationToken = default); public virtual Task> DeleteVectorStoreAsync(VectorStore vectorStore); - public virtual Task> DeleteVectorStoreAsync(string vectorStoreId); public virtual Task DeleteVectorStoreAsync(string vectorStoreId, RequestOptions options); + public virtual Task> DeleteVectorStoreAsync(string vectorStoreId, CancellationToken cancellationToken = default); public virtual ClientResult GetBatchFileJob(VectorStoreBatchFileJob batchJob); - public virtual ClientResult GetBatchFileJob(string vectorStoreId, string batchJobId); public virtual ClientResult GetBatchFileJob(string vectorStoreId, string batchId, RequestOptions options); + public virtual ClientResult GetBatchFileJob(string vectorStoreId, string batchJobId, CancellationToken cancellationToken = default); public virtual Task> GetBatchFileJobAsync(VectorStoreBatchFileJob batchJob); - public virtual Task> GetBatchFileJobAsync(string vectorStoreId, string batchJobId); public virtual Task GetBatchFileJobAsync(string vectorStoreId, string batchId, RequestOptions options); + public virtual Task> GetBatchFileJobAsync(string vectorStoreId, string batchJobId, CancellationToken cancellationToken = default); public virtual ClientResult GetFileAssociation(VectorStore vectorStore, OpenAIFileInfo file); - public virtual ClientResult GetFileAssociation(string vectorStoreId, string fileId); public virtual ClientResult GetFileAssociation(string vectorStoreId, string fileId, RequestOptions options); + public virtual ClientResult GetFileAssociation(string vectorStoreId, string fileId, CancellationToken cancellationToken = default); public virtual Task> GetFileAssociationAsync(VectorStore vectorStore, OpenAIFileInfo file); - public virtual Task> GetFileAssociationAsync(string vectorStoreId, string fileId); public virtual Task GetFileAssociationAsync(string vectorStoreId, string fileId, RequestOptions options); + public virtual Task> GetFileAssociationAsync(string vectorStoreId, string fileId, CancellationToken cancellationToken = default); public virtual PageableCollection GetFileAssociations(VectorStore vectorStore, ListOrder? resultOrder = null, VectorStoreFileStatusFilter? filter = null); public virtual PageableCollection GetFileAssociations(VectorStoreBatchFileJob batchJob, ListOrder? resultOrder = null, VectorStoreFileStatusFilter? filter = null); - public virtual PageableCollection GetFileAssociations(string vectorStoreId, ListOrder? resultOrder = null, VectorStoreFileStatusFilter? filter = null); - public virtual PageableCollection GetFileAssociations(string vectorStoreId, string batchJobId, ListOrder? resultOrder = null, VectorStoreFileStatusFilter? filter = null); public virtual ClientResult GetFileAssociations(string vectorStoreId, int? limit, string order, string after, string before, string filter, RequestOptions options); + public virtual PageableCollection GetFileAssociations(string vectorStoreId, ListOrder? resultOrder = null, VectorStoreFileStatusFilter? filter = null, CancellationToken cancellationToken = default); public virtual ClientResult GetFileAssociations(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, RequestOptions options); + public virtual PageableCollection GetFileAssociations(string vectorStoreId, string batchJobId, ListOrder? resultOrder = null, VectorStoreFileStatusFilter? filter = null, CancellationToken cancellationToken = default); public virtual AsyncPageableCollection GetFileAssociationsAsync(VectorStore vectorStore, ListOrder? resultOrder = null, VectorStoreFileStatusFilter? filter = null); public virtual AsyncPageableCollection GetFileAssociationsAsync(VectorStoreBatchFileJob batchJob, ListOrder? resultOrder = null, VectorStoreFileStatusFilter? filter = null); - public virtual AsyncPageableCollection GetFileAssociationsAsync(string vectorStoreId, ListOrder? resultOrder = null, VectorStoreFileStatusFilter? filter = null); - public virtual AsyncPageableCollection GetFileAssociationsAsync(string vectorStoreId, string batchJobId, ListOrder? resultOrder = null, VectorStoreFileStatusFilter? filter = null); public virtual Task GetFileAssociationsAsync(string vectorStoreId, int? limit, string order, string after, string before, string filter, RequestOptions options); + public virtual AsyncPageableCollection GetFileAssociationsAsync(string vectorStoreId, ListOrder? resultOrder = null, VectorStoreFileStatusFilter? filter = null, CancellationToken cancellationToken = default); public virtual Task GetFileAssociationsAsync(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, RequestOptions options); + public virtual AsyncPageableCollection GetFileAssociationsAsync(string vectorStoreId, string batchJobId, ListOrder? resultOrder = null, VectorStoreFileStatusFilter? filter = null, CancellationToken cancellationToken = default); + public virtual ClientResult GetVectorStore(VectorStore vectorStore); public virtual ClientResult GetVectorStore(string vectorStoreId, RequestOptions options); - public virtual ClientResult GetVectorStore(string vectorStoreId); + public virtual ClientResult GetVectorStore(string vectorStoreId, CancellationToken cancellationToken = default); public virtual Task> GetVectorStoreAsync(VectorStore vectorStore); public virtual Task GetVectorStoreAsync(string vectorStoreId, RequestOptions options); - public virtual Task> GetVectorStoreAsync(string vectorStoreId); - public virtual PageableCollection GetVectorStores(ListOrder? resultOrder = null); + public virtual Task> GetVectorStoreAsync(string vectorStoreId, CancellationToken cancellationToken = default); public virtual ClientResult GetVectorStores(int? limit, string order, string after, string before, RequestOptions options); - public virtual AsyncPageableCollection GetVectorStoresAsync(ListOrder? resultOrder = null); + public virtual PageableCollection GetVectorStores(ListOrder? resultOrder = null, CancellationToken cancellationToken = default); public virtual Task GetVectorStoresAsync(int? limit, string order, string after, string before, RequestOptions options); + public virtual AsyncPageableCollection GetVectorStoresAsync(ListOrder? resultOrder = null, CancellationToken cancellationToken = default); public virtual ClientResult ModifyVectorStore(VectorStore vectorStore, VectorStoreModificationOptions options); + public virtual ClientResult ModifyVectorStore(string vectorStoreId, VectorStoreModificationOptions vectorStore, CancellationToken cancellationToken = default); public virtual ClientResult ModifyVectorStore(string vectorStoreId, BinaryContent content, RequestOptions options = null); - public virtual ClientResult ModifyVectorStore(string vectorStoreId, VectorStoreModificationOptions vectorStore); public virtual Task> ModifyVectorStoreAsync(VectorStore vectorStore, VectorStoreModificationOptions options); + public virtual Task> ModifyVectorStoreAsync(string vectorStoreId, VectorStoreModificationOptions vectorStore, CancellationToken cancellationToken = default); public virtual Task ModifyVectorStoreAsync(string vectorStoreId, BinaryContent content, RequestOptions options = null); - public virtual Task> ModifyVectorStoreAsync(string vectorStoreId, VectorStoreModificationOptions vectorStore); + public virtual ClientPipeline Pipeline { get; } public virtual ClientResult RemoveFileFromStore(VectorStore vectorStore, OpenAIFileInfo file); - public virtual ClientResult RemoveFileFromStore(string vectorStoreId, string fileId); public virtual ClientResult RemoveFileFromStore(string vectorStoreId, string fileId, RequestOptions options); + public virtual ClientResult RemoveFileFromStore(string vectorStoreId, string fileId, CancellationToken cancellationToken = default); public virtual Task> RemoveFileFromStoreAsync(VectorStore vectorStore, OpenAIFileInfo file); - public virtual Task> RemoveFileFromStoreAsync(string vectorStoreId, string fileId); public virtual Task RemoveFileFromStoreAsync(string vectorStoreId, string fileId, RequestOptions options); + public virtual Task> RemoveFileFromStoreAsync(string vectorStoreId, string fileId, CancellationToken cancellationToken = default); + protected VectorStoreClient(); + public VectorStoreClient(OpenAIClientOptions options = null); + public VectorStoreClient(ApiKeyCredential credential, OpenAIClientOptions options = null); + protected VectorStoreClient(ClientPipeline pipeline, Uri endpoint, OpenAIClientOptions options); } public class VectorStoreCreationOptions { public VectorStoreCreationOptions(); diff --git a/examples/Assistants/Example01_RetrievalAugmentedGeneration.cs b/examples/Assistants/Example01_RetrievalAugmentedGeneration.cs index 549ea3db0..7ae465fbb 100644 --- a/examples/Assistants/Example01_RetrievalAugmentedGeneration.cs +++ b/examples/Assistants/Example01_RetrievalAugmentedGeneration.cs @@ -5,7 +5,6 @@ using System.ClientModel; using System.Collections.Generic; using System.IO; -using System.Threading; namespace OpenAI.Examples; @@ -88,18 +87,12 @@ public void Example01_RetrievalAugmentedGeneration() InitialMessages = { "How well did product 113045 sell in February? Graph its trend over time." } }; - ThreadRun threadRun = assistantClient.CreateThreadAndRun(assistant.Id, threadOptions); - - // Check back to see when the run is done - do - { - Thread.Sleep(TimeSpan.FromSeconds(1)); - threadRun = assistantClient.GetRun(threadRun.ThreadId, threadRun.Id); - } while (!threadRun.Status.IsTerminal); + // Passing ReturnWhen.Completed means CreateThreadAndRun will return control after the run is complete. + RunOperation runOperation = assistantClient.CreateThreadAndRun(ReturnWhen.Completed, assistant.Id, threadOptions); // Finally, we'll print out the full history for the thread that includes the augmented generation PageCollection messagePages - = assistantClient.GetMessages(threadRun.ThreadId, new MessageCollectionOptions() { Order = ListOrder.OldestFirst }); + = assistantClient.GetMessages(runOperation.ThreadId, new MessageCollectionOptions() { Order = ListOrder.OldestFirst }); IEnumerable messages = messagePages.GetAllValues(); foreach (ThreadMessage message in messages) @@ -143,7 +136,7 @@ PageCollection messagePages } // Optionally, delete any persistent resources you no longer need. - _ = assistantClient.DeleteThread(threadRun.ThreadId); + _ = assistantClient.DeleteThread(runOperation.ThreadId); _ = assistantClient.DeleteAssistant(assistant); _ = fileClient.DeleteFile(salesFile); } diff --git a/examples/Assistants/Example01_RetrievalAugmentedGenerationAsync.cs b/examples/Assistants/Example01_RetrievalAugmentedGenerationAsync.cs index 83b95fb0e..e6afefac3 100644 --- a/examples/Assistants/Example01_RetrievalAugmentedGenerationAsync.cs +++ b/examples/Assistants/Example01_RetrievalAugmentedGenerationAsync.cs @@ -5,7 +5,6 @@ using System.ClientModel; using System.Collections.Generic; using System.IO; -using System.Threading; using System.Threading.Tasks; namespace OpenAI.Examples; @@ -89,18 +88,11 @@ public async Task Example01_RetrievalAugmentedGenerationAsync() InitialMessages = { "How well did product 113045 sell in February? Graph its trend over time." } }; - ThreadRun threadRun = await assistantClient.CreateThreadAndRunAsync(assistant.Id, threadOptions); - - // Check back to see when the run is done - do - { - Thread.Sleep(TimeSpan.FromSeconds(1)); - threadRun = assistantClient.GetRun(threadRun.ThreadId, threadRun.Id); - } while (!threadRun.Status.IsTerminal); + RunOperation runOperation = await assistantClient.CreateThreadAndRunAsync(ReturnWhen.Completed, assistant.Id, threadOptions); // Finally, we'll print out the full history for the thread that includes the augmented generation AsyncPageCollection messagePages - = assistantClient.GetMessagesAsync(threadRun.ThreadId, new MessageCollectionOptions() { Order = ListOrder.OldestFirst }); + = assistantClient.GetMessagesAsync(runOperation.ThreadId, new MessageCollectionOptions() { Order = ListOrder.OldestFirst }); IAsyncEnumerable messages = messagePages.GetAllValuesAsync(); await foreach (ThreadMessage message in messages) @@ -144,7 +136,7 @@ AsyncPageCollection messagePages } // Optionally, delete any persistent resources you no longer need. - _ = await assistantClient.DeleteThreadAsync(threadRun.ThreadId); + _ = await assistantClient.DeleteThreadAsync(runOperation.ThreadId); _ = await assistantClient.DeleteAssistantAsync(assistant); _ = await fileClient.DeleteFileAsync(salesFile); } diff --git a/examples/Assistants/Example02_FunctionCalling.cs b/examples/Assistants/Example02_FunctionCalling.cs index a0eb05637..abe753d2b 100644 --- a/examples/Assistants/Example02_FunctionCalling.cs +++ b/examples/Assistants/Example02_FunctionCalling.cs @@ -13,7 +13,7 @@ public partial class AssistantExamples [Test] public void Example02_FunctionCalling() { - #region + #region Define Functions string GetCurrentLocation() { // Call a location API here. @@ -64,7 +64,7 @@ string GetCurrentWeather(string location, string unit = "celsius") #pragma warning disable OPENAI001 AssistantClient client = new(Environment.GetEnvironmentVariable("OPENAI_API_KEY")); - #region + #region Create Assistant // Create an assistant that can call the function tools. AssistantCreationOptions assistantOptions = new() { @@ -78,29 +78,27 @@ string GetCurrentWeather(string location, string unit = "celsius") Assistant assistant = client.CreateAssistant("gpt-4-turbo", assistantOptions); #endregion - #region + #region Create Thread and Run // Create a thread with an initial user message and run it. ThreadCreationOptions threadOptions = new() { InitialMessages = { "What's the weather like today?" } }; - ThreadRun run = client.CreateThreadAndRun(assistant.Id, threadOptions); + RunOperation runOperation = client.CreateThreadAndRun(ReturnWhen.Started, assistant.Id, threadOptions); #endregion - #region - // Poll the run until it is no longer queued or in progress. - while (!run.Status.IsTerminal) - { - Thread.Sleep(TimeSpan.FromSeconds(1)); - run = client.GetRun(run.ThreadId, run.Id); + #region Submit tool outputs to run + + IEnumerable updates = runOperation.GetUpdates(); - // If the run requires action, resolve them. - if (run.Status == RunStatus.RequiresAction) + foreach (ThreadRun update in updates) + { + if (update.Status == RunStatus.RequiresAction) { List toolOutputs = []; - foreach (RequiredAction action in run.RequiredActions) + foreach (RequiredAction action in runOperation.Value.RequiredActions) { switch (action.FunctionName) { @@ -142,17 +140,19 @@ string GetCurrentWeather(string location, string unit = "celsius") } // Submit the tool outputs to the assistant, which returns the run to the queued state. - run = client.SubmitToolOutputsToRun(run.ThreadId, run.Id, toolOutputs); + runOperation.SubmitToolOutputsToRun(toolOutputs); } } + #endregion - #region - // With the run complete, list the messages and display their content - if (run.Status == RunStatus.Completed) + #region Get and display messages + + // If the run completed successfully, list the messages and display their content + if (runOperation.Status == RunStatus.Completed) { PageCollection messagePages - = client.GetMessages(run.ThreadId, new MessageCollectionOptions() { Order = ListOrder.OldestFirst }); + = client.GetMessages(runOperation.ThreadId, new MessageCollectionOptions() { Order = ListOrder.OldestFirst }); IEnumerable messages = messagePages.GetAllValues(); foreach (ThreadMessage message in messages) @@ -186,7 +186,7 @@ PageCollection messagePages } else { - throw new NotImplementedException(run.Status.ToString()); + throw new NotImplementedException(runOperation.Status.ToString()); } #endregion } diff --git a/examples/Assistants/Example02_FunctionCallingAsync.cs b/examples/Assistants/Example02_FunctionCallingAsync.cs index 2ee924c56..a828deb9e 100644 --- a/examples/Assistants/Example02_FunctionCallingAsync.cs +++ b/examples/Assistants/Example02_FunctionCallingAsync.cs @@ -85,22 +85,22 @@ string GetCurrentWeather(string location, string unit = "celsius") InitialMessages = { "What's the weather like today?" } }; - ThreadRun run = await client.CreateThreadAndRunAsync(assistant.Id, threadOptions); + RunOperation runOperation = await client.CreateThreadAndRunAsync(ReturnWhen.Started, assistant.Id, threadOptions); #endregion #region - // Poll the run until it is no longer queued or in progress. - while (!run.Status.IsTerminal) - { - await Task.Delay(TimeSpan.FromSeconds(1)); - run = await client.GetRunAsync(run.ThreadId, run.Id); + + IEnumerable updates = runOperation.GetUpdates(); + + foreach (ThreadRun update in updates) + { // If the run requires action, resolve them. - if (run.Status == RunStatus.RequiresAction) + if (runOperation.Status == RunStatus.RequiresAction) { List toolOutputs = []; - foreach (RequiredAction action in run.RequiredActions) + foreach (RequiredAction action in runOperation.Value.RequiredActions) { switch (action.FunctionName) { @@ -142,17 +142,17 @@ string GetCurrentWeather(string location, string unit = "celsius") } // Submit the tool outputs to the assistant, which returns the run to the queued state. - run = await client.SubmitToolOutputsToRunAsync(run.ThreadId, run.Id, toolOutputs); + await runOperation.SubmitToolOutputsToRunAsync(toolOutputs); } } #endregion #region // With the run complete, list the messages and display their content - if (run.Status == RunStatus.Completed) + if (runOperation.Status == RunStatus.Completed) { AsyncPageCollection messagePages - = client.GetMessagesAsync(run.ThreadId, new MessageCollectionOptions() { Order = ListOrder.OldestFirst }); + = client.GetMessagesAsync(runOperation.ThreadId, new MessageCollectionOptions() { Order = ListOrder.OldestFirst }); IAsyncEnumerable messages = messagePages.GetAllValuesAsync(); await foreach (ThreadMessage message in messages) @@ -186,7 +186,7 @@ AsyncPageCollection messagePages } else { - throw new NotImplementedException(run.Status.ToString()); + throw new NotImplementedException(runOperation.Status.ToString()); } #endregion } diff --git a/examples/Assistants/Example02b_FunctionCallingStreaming.cs b/examples/Assistants/Example02b_FunctionCallingStreaming.cs index 9c3e0adfc..38b811772 100644 --- a/examples/Assistants/Example02b_FunctionCallingStreaming.cs +++ b/examples/Assistants/Example02b_FunctionCallingStreaming.cs @@ -1,7 +1,6 @@ using NUnit.Framework; using OpenAI.Assistants; using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Threading.Tasks; @@ -91,43 +90,34 @@ public async Task Example02b_FunctionCallingStreaming() #endregion #region Step 3 - Initiate a streaming run - AsyncCollectionResult asyncUpdates - = client.CreateRunStreamingAsync(thread, assistant); + StreamingRunOperation runOperation = client.CreateRunStreaming(thread, assistant); + IAsyncEnumerable updates = runOperation.GetUpdatesStreamingAsync(); - ThreadRun currentRun = null; - do + await foreach (StreamingUpdate update in updates) { - currentRun = null; - List outputsToSubmit = []; - await foreach (StreamingUpdate update in asyncUpdates) + if (update is RequiredActionUpdate requiredActionUpdate) { - if (update is RunUpdate runUpdate) - { - currentRun = runUpdate; - } - else if (update is RequiredActionUpdate requiredActionUpdate) + List outputsToSubmit = []; + + foreach (RequiredAction action in requiredActionUpdate.RequiredActions) { - if (requiredActionUpdate.FunctionName == getTemperatureTool.FunctionName) + if (action.FunctionName == getTemperatureTool.FunctionName) { - outputsToSubmit.Add(new ToolOutput(requiredActionUpdate.ToolCallId, "57")); + outputsToSubmit.Add(new ToolOutput(action.ToolCallId, "57")); } - else if (requiredActionUpdate.FunctionName == getRainProbabilityTool.FunctionName) + else if (action.FunctionName == getRainProbabilityTool.FunctionName) { - outputsToSubmit.Add(new ToolOutput(requiredActionUpdate.ToolCallId, "25%")); + outputsToSubmit.Add(new ToolOutput(action.ToolCallId, "25%")); } } - else if (update is MessageContentUpdate contentUpdate) - { - Console.Write(contentUpdate.Text); - } + + await runOperation.SubmitToolOutputsToRunStreamingAsync(outputsToSubmit); } - if (outputsToSubmit.Count > 0) + else if (update is MessageContentUpdate contentUpdate) { - asyncUpdates = client.SubmitToolOutputsToRunStreamingAsync(currentRun, outputsToSubmit); + Console.Write(contentUpdate.Text); } } - while (currentRun?.Status.IsTerminal == false); - #endregion // Optionally, delete the resources for tidiness if no longer needed. diff --git a/examples/Assistants/Example03_ListAssistantsWithPagination.cs b/examples/Assistants/Example03_ListAssistantsWithPagination.cs index e8640f1c5..83776d7a1 100644 --- a/examples/Assistants/Example03_ListAssistantsWithPagination.cs +++ b/examples/Assistants/Example03_ListAssistantsWithPagination.cs @@ -17,8 +17,8 @@ public void Example03_ListAssistantsWithPagination() int count = 0; - PageCollection assitantPages = client.GetAssistants(); - IEnumerable assistants = assitantPages.GetAllValues(); + PageCollection assistantPages = client.GetAssistants(); + IEnumerable assistants = assistantPages.GetAllValues(); foreach (Assistant assistant in assistants) { Console.WriteLine($"[{count,3}] {assistant.Id} {assistant.CreatedAt:s} {assistant.Name}"); diff --git a/examples/Assistants/Example03_ListAssistantsWithPaginationAsync.cs b/examples/Assistants/Example03_ListAssistantsWithPaginationAsync.cs index fa67a713f..1f4d8218e 100644 --- a/examples/Assistants/Example03_ListAssistantsWithPaginationAsync.cs +++ b/examples/Assistants/Example03_ListAssistantsWithPaginationAsync.cs @@ -18,8 +18,8 @@ public async Task Example03_ListAssistantsWithPaginationAsync() int count = 0; - AsyncPageCollection assitantPages = client.GetAssistantsAsync(); - IAsyncEnumerable assistants = assitantPages.GetAllValuesAsync(); + AsyncPageCollection assistantPages = client.GetAssistantsAsync(); + IAsyncEnumerable assistants = assistantPages.GetAllValuesAsync(); await foreach (Assistant assistant in assistants) { Console.WriteLine($"[{count,3}] {assistant.Id} {assistant.CreatedAt:s} {assistant.Name}"); diff --git a/examples/Assistants/Example04_AllTheTools.cs b/examples/Assistants/Example04_AllTheTools.cs index 94b801f95..80fd09e7e 100644 --- a/examples/Assistants/Example04_AllTheTools.cs +++ b/examples/Assistants/Example04_AllTheTools.cs @@ -5,7 +5,6 @@ using System.ClientModel; using System.Collections.Generic; using System.Text.Json; -using System.Threading; namespace OpenAI.Examples; @@ -89,22 +88,20 @@ static string GetNameOfFamilyMember(string relation) } }); - ThreadRun run = client.CreateRun(thread, assistant); + RunOperation runOperation = client.CreateRun(ReturnWhen.Started, thread, assistant); #endregion #region Complete the run, calling functions as needed - // Poll the run until it is no longer queued or in progress. - while (!run.Status.IsTerminal) - { - Thread.Sleep(TimeSpan.FromSeconds(1)); - run = client.GetRun(run.ThreadId, run.Id); + IEnumerable updates = runOperation.GetUpdates(); + foreach (ThreadRun update in updates) + { // If the run requires action, resolve them. - if (run.Status == RunStatus.RequiresAction) + if (runOperation.Status == RunStatus.RequiresAction) { List toolOutputs = []; - foreach (RequiredAction action in run.RequiredActions) + foreach (RequiredAction action in runOperation.Value.RequiredActions) { switch (action.FunctionName) { @@ -128,17 +125,17 @@ static string GetNameOfFamilyMember(string relation) } // Submit the tool outputs to the assistant, which returns the run to the queued state. - run = client.SubmitToolOutputsToRun(run.ThreadId, run.Id, toolOutputs); + runOperation.SubmitToolOutputsToRun(toolOutputs); } } #endregion #region // With the run complete, list the messages and display their content - if (run.Status == RunStatus.Completed) + if (runOperation.Status == RunStatus.Completed) { PageCollection messagePages - = client.GetMessages(run.ThreadId, new MessageCollectionOptions() { Order = ListOrder.OldestFirst }); + = client.GetMessages(runOperation.ThreadId, new MessageCollectionOptions() { Order = ListOrder.OldestFirst }); IEnumerable messages = messagePages.GetAllValues(); foreach (ThreadMessage message in messages) @@ -172,7 +169,7 @@ PageCollection messagePages #endregion #region List run steps for details about tool calls - PageCollection runSteps = client.GetRunSteps(run, new() { Order = ListOrder.OldestFirst }); + PageCollection runSteps = runOperation.GetRunSteps(new RunStepCollectionOptions() { Order = ListOrder.OldestFirst }); foreach (RunStep step in runSteps.GetAllValues()) { Console.WriteLine($"Run step: {step.Status}"); @@ -189,7 +186,7 @@ PageCollection messagePages } else { - throw new NotImplementedException(run.Status.ToString()); + throw new NotImplementedException(runOperation.Status.ToString()); } #endregion diff --git a/examples/Assistants/Example05_AssistantsWithVision.cs b/examples/Assistants/Example05_AssistantsWithVision.cs index 4d10c84cf..178df6a75 100644 --- a/examples/Assistants/Example05_AssistantsWithVision.cs +++ b/examples/Assistants/Example05_AssistantsWithVision.cs @@ -44,7 +44,7 @@ public void Example05_AssistantsWithVision() } }); - CollectionResult streamingUpdates = assistantClient.CreateRunStreaming( + StreamingRunOperation runOperation = assistantClient.CreateRunStreaming( thread, assistant, new RunCreationOptions() @@ -52,7 +52,7 @@ public void Example05_AssistantsWithVision() AdditionalInstructions = "When possible, try to sneak in puns if you're asked to compare things.", }); - foreach (StreamingUpdate streamingUpdate in streamingUpdates) + foreach (StreamingUpdate streamingUpdate in runOperation.GetUpdatesStreaming()) { if (streamingUpdate.UpdateKind == StreamingUpdateReason.RunCreated) { diff --git a/examples/Assistants/Example05_AssistantsWithVisionAsync.cs b/examples/Assistants/Example05_AssistantsWithVisionAsync.cs index 3f79137e8..8f9129d05 100644 --- a/examples/Assistants/Example05_AssistantsWithVisionAsync.cs +++ b/examples/Assistants/Example05_AssistantsWithVisionAsync.cs @@ -45,7 +45,7 @@ public async Task Example05_AssistantsWithVisionAsync() } }); - AsyncCollectionResult streamingUpdates = assistantClient.CreateRunStreamingAsync( + StreamingRunOperation runOperation = assistantClient.CreateRunStreaming( thread, assistant, new RunCreationOptions() @@ -53,7 +53,7 @@ public async Task Example05_AssistantsWithVisionAsync() AdditionalInstructions = "When possible, try to sneak in puns if you're asked to compare things.", }); - await foreach (StreamingUpdate streamingUpdate in streamingUpdates) + await foreach (StreamingUpdate streamingUpdate in runOperation.GetUpdatesStreamingAsync()) { if (streamingUpdate.UpdateKind == StreamingUpdateReason.RunCreated) { diff --git a/examples/ClientExamples.cs b/examples/ClientExamples.cs index 798d9ef3e..dff74f119 100644 --- a/examples/ClientExamples.cs +++ b/examples/ClientExamples.cs @@ -14,7 +14,7 @@ public partial class ClientExamples [Test] public void CreateChatClient() { - ChatClient client = new("gpt-3.5-turbo", Environment.GetEnvironmentVariable("OPENAI_API_KEY")); + ChatClient client = new("gpt-4o", Environment.GetEnvironmentVariable("OPENAI_API_KEY")); } [Test] diff --git a/src/Custom/Assistants/Assistant.cs b/src/Custom/Assistants/Assistant.cs index 872b43884..34ee40166 100644 --- a/src/Custom/Assistants/Assistant.cs +++ b/src/Custom/Assistants/Assistant.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Assistants; +namespace OpenAI.Assistants; [CodeGenModel("AssistantObject")] public partial class Assistant diff --git a/src/Custom/Assistants/AssistantClient.Convenience.cs b/src/Custom/Assistants/AssistantClient.Convenience.cs index 5eb15133d..fa4e020d0 100644 --- a/src/Custom/Assistants/AssistantClient.Convenience.cs +++ b/src/Custom/Assistants/AssistantClient.Convenience.cs @@ -218,8 +218,12 @@ public virtual ClientResult DeleteMessage(ThreadMessage message) /// The assistant that should be used when evaluating the thread. /// Additional options for the run. /// A new instance. - public virtual Task> CreateRunAsync(AssistantThread thread, Assistant assistant, RunCreationOptions options = null) - => CreateRunAsync(thread?.Id, assistant?.Id, options); + public virtual async Task CreateRunAsync( + ReturnWhen returnWhen, + AssistantThread thread, + Assistant assistant, + RunCreationOptions options = null) + => await CreateRunAsync(returnWhen, thread?.Id, assistant?.Id, options).ConfigureAwait(false); /// /// Begins a new that evaluates a using a specified @@ -229,21 +233,12 @@ public virtual Task> CreateRunAsync(AssistantThread thre /// The assistant that should be used when evaluating the thread. /// Additional options for the run. /// A new instance. - public virtual ClientResult CreateRun(AssistantThread thread, Assistant assistant, RunCreationOptions options = null) - => CreateRun(thread?.Id, assistant?.Id, options); - - /// - /// Begins a new streaming that evaluates a using a specified - /// . - /// - /// The thread that the run should evaluate. - /// The assistant that should be used when evaluating the thread. - /// Additional options for the run. - public virtual AsyncCollectionResult CreateRunStreamingAsync( - AssistantThread thread, - Assistant assistant, + public virtual RunOperation CreateRun( + ReturnWhen returnWhen, + AssistantThread thread, + Assistant assistant, RunCreationOptions options = null) - => CreateRunStreamingAsync(thread?.Id, assistant?.Id, options); + => CreateRun(returnWhen, thread?.Id, assistant?.Id, options); /// /// Begins a new streaming that evaluates a using a specified @@ -252,7 +247,7 @@ public virtual AsyncCollectionResult CreateRunStreamingAsync( /// The thread that the run should evaluate. /// The assistant that should be used when evaluating the thread. /// Additional options for the run. - public virtual CollectionResult CreateRunStreaming( + public virtual StreamingRunOperation CreateRunStreaming( AssistantThread thread, Assistant assistant, RunCreationOptions options = null) @@ -265,11 +260,12 @@ public virtual CollectionResult CreateRunStreaming( /// Options for the new thread that will be created. /// Additional options to apply to the run that will begin. /// A new . - public virtual Task> CreateThreadAndRunAsync( + public virtual async Task CreateThreadAndRunAsync( + ReturnWhen returnWhen, Assistant assistant, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null) - => CreateThreadAndRunAsync(assistant?.Id, threadOptions, runOptions); + => await CreateThreadAndRunAsync(returnWhen, assistant?.Id, threadOptions, runOptions).ConfigureAwait(false); /// /// Creates a new thread and immediately begins a run against it using the specified . @@ -278,23 +274,12 @@ public virtual Task> CreateThreadAndRunAsync( /// Options for the new thread that will be created. /// Additional options to apply to the run that will begin. /// A new . - public virtual ClientResult CreateThreadAndRun( - Assistant assistant, - ThreadCreationOptions threadOptions = null, - RunCreationOptions runOptions = null) - => CreateThreadAndRun(assistant?.Id, threadOptions, runOptions); - - /// - /// Creates a new thread and immediately begins a streaming run against it using the specified . - /// - /// The assistant that the new run should use. - /// Options for the new thread that will be created. - /// Additional options to apply to the run that will begin. - public virtual AsyncCollectionResult CreateThreadAndRunStreamingAsync( + public virtual RunOperation CreateThreadAndRun( + ReturnWhen returnWhen, Assistant assistant, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null) - => CreateThreadAndRunStreamingAsync(assistant?.Id, threadOptions, runOptions); + => CreateThreadAndRun(returnWhen, assistant?.Id, threadOptions, runOptions); /// /// Creates a new thread and immediately begins a streaming run against it using the specified . @@ -302,7 +287,7 @@ public virtual AsyncCollectionResult CreateThreadAndRunStreamin /// The assistant that the new run should use. /// Options for the new thread that will be created. /// Additional options to apply to the run that will begin. - public virtual CollectionResult CreateThreadAndRunStreaming( + public virtual StreamingRunOperation CreateThreadAndRunStreaming( Assistant assistant, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null) @@ -343,122 +328,4 @@ public virtual PageCollection GetRuns( return GetRuns(thread.Id, options); } - - /// - /// Gets a refreshed instance of an existing . - /// - /// The run to get a refreshed instance of. - /// A new instance with updated information. - public virtual Task> GetRunAsync(ThreadRun run) - => GetRunAsync(run?.ThreadId, run?.Id); - - /// - /// Gets a refreshed instance of an existing . - /// - /// The run to get a refreshed instance of. - /// A new instance with updated information. - public virtual ClientResult GetRun(ThreadRun run) - => GetRun(run?.ThreadId, run?.Id); - - /// - /// Submits a collection of required tool call outputs to a run and resumes the run. - /// - /// The run that reached a requires_action status. - /// - /// The tool outputs, corresponding to instances from the run. - /// - /// The , updated after the submission was processed. - public virtual Task> SubmitToolOutputsToRunAsync( - ThreadRun run, - IEnumerable toolOutputs) - => SubmitToolOutputsToRunAsync(run?.ThreadId, run?.Id, toolOutputs); - - /// - /// Submits a collection of required tool call outputs to a run and resumes the run. - /// - /// The run that reached a requires_action status. - /// - /// The tool outputs, corresponding to instances from the run. - /// - /// The , updated after the submission was processed. - public virtual ClientResult SubmitToolOutputsToRun( - ThreadRun run, - IEnumerable toolOutputs) - => SubmitToolOutputsToRun(run?.ThreadId, run?.Id, toolOutputs); - - /// - /// Submits a collection of required tool call outputs to a run and resumes the run with streaming enabled. - /// - /// The run that reached a requires_action status. - /// - /// The tool outputs, corresponding to instances from the run. - /// - public virtual AsyncCollectionResult SubmitToolOutputsToRunStreamingAsync( - ThreadRun run, - IEnumerable toolOutputs) - => SubmitToolOutputsToRunStreamingAsync(run?.ThreadId, run?.Id, toolOutputs); - - /// - /// Submits a collection of required tool call outputs to a run and resumes the run with streaming enabled. - /// - /// The run that reached a requires_action status. - /// - /// The tool outputs, corresponding to instances from the run. - /// - public virtual CollectionResult SubmitToolOutputsToRunStreaming( - ThreadRun run, - IEnumerable toolOutputs) - => SubmitToolOutputsToRunStreaming(run?.ThreadId, run?.Id, toolOutputs); - - /// - /// Cancels an in-progress . - /// - /// The run to cancel. - /// An updated instance, reflecting the new status of the run. - public virtual Task> CancelRunAsync(ThreadRun run) - => CancelRunAsync(run?.ThreadId, run?.Id); - - /// - /// Cancels an in-progress . - /// - /// The run to cancel. - /// An updated instance, reflecting the new status of the run. - public virtual ClientResult CancelRun(ThreadRun run) - => CancelRun(run?.ThreadId, run?.Id); - - /// - /// Gets a page collection holding instances associated with a . - /// - /// The run to list run steps from. - /// Options describing the collection to return. - /// holds pages of values. To obtain a collection of values, call - /// . To obtain the current - /// page of values, call . - /// A collection of pages of . - public virtual AsyncPageCollection GetRunStepsAsync( - ThreadRun run, - RunStepCollectionOptions options = default) - { - Argument.AssertNotNull(run, nameof(run)); - - return GetRunStepsAsync(run.ThreadId, run.Id, options); - } - - /// - /// Gets a page collection holding instances associated with a . - /// - /// The run to list run steps from. - /// Options describing the collection to return. - /// holds pages of values. To obtain a collection of values, call - /// . To obtain the current - /// page of values, call . - /// A collection of pages of . - public virtual PageCollection GetRunSteps( - ThreadRun run, - RunStepCollectionOptions options = default) - { - Argument.AssertNotNull(run, nameof(run)); - - return GetRunSteps(run.ThreadId, run.Id, options); - } } diff --git a/src/Custom/Assistants/AssistantClient.Protocol.cs b/src/Custom/Assistants/AssistantClient.Protocol.cs index 7e6344b3c..df79e33f6 100644 --- a/src/Custom/Assistants/AssistantClient.Protocol.cs +++ b/src/Custom/Assistants/AssistantClient.Protocol.cs @@ -2,6 +2,7 @@ using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.ComponentModel; using System.Threading.Tasks; namespace OpenAI.Assistants; @@ -16,6 +17,7 @@ public partial class AssistantClient /// is null. /// Service returned a non-success status code. /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] public virtual async Task CreateAssistantAsync(BinaryContent content, RequestOptions options = null) { Argument.AssertNotNull(content, nameof(content)); @@ -32,6 +34,7 @@ public virtual async Task CreateAssistantAsync(BinaryContent conte /// is null. /// Service returned a non-success status code. /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult CreateAssistant(BinaryContent content, RequestOptions options = null) { Argument.AssertNotNull(content, nameof(content)); @@ -64,6 +67,7 @@ public virtual ClientResult CreateAssistant(BinaryContent content, RequestOption /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// Service returned a non-success status code. /// A collection of service responses, each holding a page of values. + [EditorBrowsable(EditorBrowsableState.Never)] public virtual IAsyncEnumerable GetAssistantsAsync(int? limit, string order, string after, string before, RequestOptions options) { AssistantsPageEnumerator enumerator = new AssistantsPageEnumerator(_pipeline, _endpoint, limit, order, after, before, options); @@ -94,6 +98,7 @@ public virtual IAsyncEnumerable GetAssistantsAsync(int? limit, str /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// Service returned a non-success status code. /// A collection of service responses, each holding a page of values. + [EditorBrowsable(EditorBrowsableState.Never)] public virtual IEnumerable GetAssistants(int? limit, string order, string after, string before, RequestOptions options) { AssistantsPageEnumerator enumerator = new AssistantsPageEnumerator(_pipeline, _endpoint, limit, order, after, before, options); @@ -109,6 +114,7 @@ public virtual IEnumerable GetAssistants(int? limit, string order, /// is an empty string, and was expected to be non-empty. /// Service returned a non-success status code. /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] public virtual async Task GetAssistantAsync(string assistantId, RequestOptions options) { Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); @@ -126,6 +132,7 @@ public virtual async Task GetAssistantAsync(string assistantId, Re /// is an empty string, and was expected to be non-empty. /// Service returned a non-success status code. /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult GetAssistant(string assistantId, RequestOptions options) { Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); @@ -144,6 +151,7 @@ public virtual ClientResult GetAssistant(string assistantId, RequestOptions opti /// is an empty string, and was expected to be non-empty. /// Service returned a non-success status code. /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] public virtual async Task ModifyAssistantAsync(string assistantId, BinaryContent content, RequestOptions options = null) { Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); @@ -163,6 +171,7 @@ public virtual async Task ModifyAssistantAsync(string assistantId, /// is an empty string, and was expected to be non-empty. /// Service returned a non-success status code. /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult ModifyAssistant(string assistantId, BinaryContent content, RequestOptions options = null) { Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); @@ -181,6 +190,7 @@ public virtual ClientResult ModifyAssistant(string assistantId, BinaryContent co /// is an empty string, and was expected to be non-empty. /// Service returned a non-success status code. /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] public virtual async Task DeleteAssistantAsync(string assistantId, RequestOptions options) { Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); @@ -198,6 +208,7 @@ public virtual async Task DeleteAssistantAsync(string assistantId, /// is an empty string, and was expected to be non-empty. /// Service returned a non-success status code. /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult DeleteAssistant(string assistantId, RequestOptions options) { Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); @@ -207,10 +218,12 @@ public virtual ClientResult DeleteAssistant(string assistantId, RequestOptions o } /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task CreateMessageAsync(string threadId, BinaryContent content, RequestOptions options = null) => _messageSubClient.CreateMessageAsync(threadId, content, options); /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult CreateMessage(string threadId, BinaryContent content, RequestOptions options = null) => _messageSubClient.CreateMessage(threadId, content, options); @@ -241,6 +254,7 @@ public virtual ClientResult CreateMessage(string threadId, BinaryContent content /// is an empty string, and was expected to be non-empty. /// Service returned a non-success status code. /// A collection of service responses, each holding a page of values. + [EditorBrowsable(EditorBrowsableState.Never)] public virtual IAsyncEnumerable GetMessagesAsync(string threadId, int? limit, string order, string after, string before, RequestOptions options) { Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); @@ -276,6 +290,7 @@ public virtual IAsyncEnumerable GetMessagesAsync(string threadId, /// is an empty string, and was expected to be non-empty. /// Service returned a non-success status code. /// A collection of service responses, each holding a page of values. + [EditorBrowsable(EditorBrowsableState.Never)] public virtual IEnumerable GetMessages(string threadId, int? limit, string order, string after, string before, RequestOptions options) { Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); @@ -285,42 +300,94 @@ public virtual IEnumerable GetMessages(string threadId, int? limit } /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task GetMessageAsync(string threadId, string messageId, RequestOptions options) => _messageSubClient.GetMessageAsync(threadId, messageId, options); /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult GetMessage(string threadId, string messageId, RequestOptions options) => _messageSubClient.GetMessage(threadId, messageId, options); + /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task ModifyMessageAsync(string threadId, string messageId, BinaryContent content, RequestOptions options = null) => _messageSubClient.ModifyMessageAsync(threadId, messageId, content, options); /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult ModifyMessage(string threadId, string messageId, BinaryContent content, RequestOptions options = null) => _messageSubClient.ModifyMessage(threadId, messageId, content, options); + /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task DeleteMessageAsync(string threadId, string messageId, RequestOptions options) => _messageSubClient.DeleteMessageAsync(threadId, messageId, options); /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult DeleteMessage(string threadId, string messageId, RequestOptions options) => _messageSubClient.DeleteMessage(threadId, messageId, options); - /// - public virtual Task CreateThreadAndRunAsync(BinaryContent content, RequestOptions options = null) - => _runSubClient.CreateThreadAndRunAsync(content, options); - - /// - public virtual ClientResult CreateThreadAndRun(BinaryContent content, RequestOptions options = null) - => _runSubClient.CreateThreadAndRun(content, options = null); - - /// - public virtual Task CreateRunAsync(string threadId, BinaryContent content, RequestOptions options = null) - => _runSubClient.CreateRunAsync(threadId, content, options); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task CreateThreadAndRunAsync( + ReturnWhen returnWhen, + BinaryContent content, + RequestOptions options = null) + { + ClientResult result = await _runSubClient.CreateThreadAndRunAsync(content, options).ConfigureAwait(false); + PipelineResponse response = result.GetRawResponse(); + RunOperation operation = new RunOperation(_pipeline, _endpoint, response); + + if (returnWhen == ReturnWhen.Started) + { + return operation; + } + + bool isStreaming = false; + if (response.Headers.TryGetValue("Content-Type", out string contentType)) + { + isStreaming = contentType == "text/event-stream; charset=utf-8"; + } + + if (isStreaming) + { + throw new NotSupportedException("Streaming runs cannot use 'ReturnWhen.Completed'"); + } + + await operation.WaitUntilStoppedAsync(options?.CancellationToken ?? default).ConfigureAwait(false); + return operation; + } - /// - public virtual ClientResult CreateRun(string threadId, BinaryContent content, RequestOptions options = null) - => _runSubClient.CreateRun(threadId, content, options); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual RunOperation CreateThreadAndRun( + ReturnWhen returnWhen, + BinaryContent content, + RequestOptions options = null) + { + ClientResult result = _runSubClient.CreateThreadAndRun(content, options); + PipelineResponse response = result.GetRawResponse(); + RunOperation operation = new RunOperation(_pipeline, _endpoint, response); + + if (returnWhen == ReturnWhen.Started) + { + return operation; + } + + bool isStreaming = false; + if (response.Headers.TryGetValue("Content-Type", out string contentType)) + { + isStreaming = contentType == "text/event-stream; charset=utf-8"; + } + + if (isStreaming) + { + throw new NotSupportedException("Streaming runs cannot use 'ReturnWhen.Completed'"); + } + + operation.WaitUntilStopped(options?.CancellationToken ?? default); + return operation; + } /// /// [Protocol Method] Returns a paginated collection of runs belonging to a thread. @@ -349,6 +416,7 @@ public virtual ClientResult CreateRun(string threadId, BinaryContent content, Re /// is an empty string, and was expected to be non-empty. /// Service returned a non-success status code. /// A collection of service responses, each holding a page of values. + [EditorBrowsable(EditorBrowsableState.Never)] public virtual IAsyncEnumerable GetRunsAsync(string threadId, int? limit, string order, string after, string before, RequestOptions options) { Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); @@ -384,6 +452,7 @@ public virtual IAsyncEnumerable GetRunsAsync(string threadId, int? /// is an empty string, and was expected to be non-empty. /// Service returned a non-success status code. /// A collection of service responses, each holding a page of values. + [EditorBrowsable(EditorBrowsableState.Never)] public virtual IEnumerable GetRuns(string threadId, int? limit, string order, string after, string before, RequestOptions options) { Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); @@ -392,149 +461,135 @@ public virtual IEnumerable GetRuns(string threadId, int? limit, st return PageCollectionHelpers.Create(enumerator); } - /// - public virtual Task GetRunAsync(string threadId, string runId, RequestOptions options) - => _runSubClient.GetRunAsync(threadId, runId, options); - - /// - public virtual ClientResult GetRun(string threadId, string runId, RequestOptions options) - => _runSubClient.GetRun(threadId, runId, options); - - /// - public virtual Task ModifyRunAsync(string threadId, string runId, BinaryContent content, RequestOptions options = null) - => _runSubClient.ModifyRunAsync(threadId, runId, content, options); - - /// - public virtual ClientResult ModifyRun(string threadId, string runId, BinaryContent content, RequestOptions options = null) - => _runSubClient.ModifyRun(threadId, runId, content, options); - - /// - public virtual Task CancelRunAsync(string threadId, string runId, RequestOptions options) - => _runSubClient.CancelRunAsync(threadId, runId, options); - - /// - public virtual ClientResult CancelRun(string threadId, string runId, RequestOptions options) - => _runSubClient.CancelRun(threadId, runId, options); - - /// - public virtual Task SubmitToolOutputsToRunAsync(string threadId, string runId, BinaryContent content, RequestOptions options = null) - => _runSubClient.SubmitToolOutputsToRunAsync(threadId, runId, content, options); - - /// - public virtual ClientResult SubmitToolOutputsToRun(string threadId, string runId, BinaryContent content, RequestOptions options = null) - => _runSubClient.SubmitToolOutputsToRun(threadId, runId, content, options); - - /// - /// [Protocol Method] Returns a paginated collection of run steps belonging to a run. - /// - /// The ID of the thread the run and run steps belong to. - /// The ID of the run the run steps belong to. - /// - /// A limit on the number of objects to be returned. Limit can range between 1 and 100, and the - /// default is 20. - /// - /// - /// Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and`desc` - /// for descending order. Allowed values: "asc" | "desc" - /// - /// - /// A cursor for use in pagination. `after` is an object ID that defines your place in the list. - /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your - /// subsequent call can include after=obj_foo in order to fetch the next page of the list. - /// - /// - /// A cursor for use in pagination. `before` is an object ID that defines your place in the list. - /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your - /// subsequent call can include before=obj_foo in order to fetch the previous page of the list. - /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// or is null. - /// or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// A collection of service responses, each holding a page of values. - public virtual IAsyncEnumerable GetRunStepsAsync(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options) + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task CreateRunAsync( + ReturnWhen returnWhen, + string threadId, + BinaryContent content, + RequestOptions options = null) { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - - RunStepsPageEnumerator enumerator = new RunStepsPageEnumerator(_pipeline, _endpoint, threadId, runId, limit, order, after, before, options); - return PageCollectionHelpers.CreateAsync(enumerator); + ClientResult result = await _runSubClient.CreateRunAsync(threadId, content, options).ConfigureAwait(false); + PipelineResponse response = result.GetRawResponse(); + RunOperation operation = new RunOperation(_pipeline, _endpoint, response); + + if (returnWhen == ReturnWhen.Started) + { + return operation; + } + + bool isStreaming = false; + if (response.Headers.TryGetValue("Content-Type", out string contentType)) + { + isStreaming = contentType == "text/event-stream; charset=utf-8"; + } + + if (isStreaming) + { + throw new NotSupportedException("Streaming runs cannot use 'ReturnWhen.Completed'"); + } + + await operation.WaitUntilStoppedAsync(options?.CancellationToken ?? default).ConfigureAwait(false); + return operation; } - /// - /// [Protocol Method] Returns a paginated collection of run steps belonging to a run. - /// - /// The ID of the thread the run and run steps belong to. - /// The ID of the run the run steps belong to. - /// - /// A limit on the number of objects to be returned. Limit can range between 1 and 100, and the - /// default is 20. - /// - /// - /// Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and`desc` - /// for descending order. Allowed values: "asc" | "desc" - /// - /// - /// A cursor for use in pagination. `after` is an object ID that defines your place in the list. - /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your - /// subsequent call can include after=obj_foo in order to fetch the next page of the list. - /// - /// - /// A cursor for use in pagination. `before` is an object ID that defines your place in the list. - /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your - /// subsequent call can include before=obj_foo in order to fetch the previous page of the list. - /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// or is null. - /// or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// A collection of service responses, each holding a page of values. - public virtual IEnumerable GetRunSteps(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options) + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual RunOperation CreateRun( + ReturnWhen returnWhen, + string threadId, + BinaryContent content, + RequestOptions options = null) { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - - RunStepsPageEnumerator enumerator = new RunStepsPageEnumerator(_pipeline, _endpoint, threadId, runId, limit, order, after, before, options); - return PageCollectionHelpers.Create(enumerator); + ClientResult result = _runSubClient.CreateRun(threadId, content, options); + PipelineResponse response = result.GetRawResponse(); + RunOperation operation = new RunOperation(_pipeline, _endpoint, response); + + if (returnWhen == ReturnWhen.Started) + { + return operation; + } + + bool isStreaming = false; + if (response.Headers.TryGetValue("Content-Type", out string contentType)) + { + isStreaming = contentType == "text/event-stream; charset=utf-8"; + } + + if (isStreaming) + { + throw new NotSupportedException("Streaming runs cannot use 'ReturnWhen.Completed'"); + } + + operation.WaitUntilStopped(options?.CancellationToken ?? default); + return operation; } - /// - public virtual Task GetRunStepAsync(string threadId, string runId, string stepId, RequestOptions options) - => _runSubClient.GetRunStepAsync(threadId, runId, stepId, options); + /// + [EditorBrowsable(EditorBrowsableState.Never)] + internal virtual Task CreateThreadAndRunAsync(BinaryContent content, RequestOptions options = null) + => _runSubClient.CreateThreadAndRunAsync(content, options); + + /// + [EditorBrowsable(EditorBrowsableState.Never)] + internal virtual ClientResult CreateThreadAndRun(BinaryContent content, RequestOptions options = null) + => _runSubClient.CreateThreadAndRun(content, options); - /// - public virtual ClientResult GetRunStep(string threadId, string runId, string stepId, RequestOptions options) - => _runSubClient.GetRunStep(threadId, runId, stepId, options); + /// + [EditorBrowsable(EditorBrowsableState.Never)] + internal virtual Task CreateRunAsync(string threadId, BinaryContent content, RequestOptions options = null) + => _runSubClient.CreateRunAsync(threadId, content, options); + + /// + [EditorBrowsable(EditorBrowsableState.Never)] + internal virtual ClientResult CreateRun(string threadId, BinaryContent content, RequestOptions options = null) + => _runSubClient.CreateRun(threadId, content, options); + + /// + [EditorBrowsable(EditorBrowsableState.Never)] + internal virtual Task GetRunAsync(string threadId, string runId, RequestOptions options = null) + => _runSubClient.GetRunAsync(threadId, runId, options); + + /// + [EditorBrowsable(EditorBrowsableState.Never)] + internal virtual ClientResult GetRun(string threadId, string runId, RequestOptions options = null) + => _runSubClient.GetRun(threadId, runId, options); /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task CreateThreadAsync(BinaryContent content, RequestOptions options = null) => _threadSubClient.CreateThreadAsync(content, options); /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult CreateThread(BinaryContent content, RequestOptions options = null) => _threadSubClient.CreateThread(content, options); /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task GetThreadAsync(string threadId, RequestOptions options) => _threadSubClient.GetThreadAsync(threadId, options); /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult GetThread(string threadId, RequestOptions options) => _threadSubClient.GetThread(threadId, options); /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task ModifyThreadAsync(string threadId, BinaryContent content, RequestOptions options = null) => _threadSubClient.ModifyThreadAsync(threadId, content, options); /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult ModifyThread(string threadId, BinaryContent content, RequestOptions options = null) => _threadSubClient.ModifyThread(threadId, content, options); /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task DeleteThreadAsync(string threadId, RequestOptions options) => _threadSubClient.DeleteThreadAsync(threadId, options); /// + [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult DeleteThread(string threadId, RequestOptions options) => _threadSubClient.DeleteThread(threadId, options); } diff --git a/src/Custom/Assistants/AssistantClient.cs b/src/Custom/Assistants/AssistantClient.cs index 9e47b4f0d..41850cdde 100644 --- a/src/Custom/Assistants/AssistantClient.cs +++ b/src/Custom/Assistants/AssistantClient.cs @@ -3,8 +3,8 @@ using System.ClientModel.Primitives; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Linq; using System.Runtime.CompilerServices; +using System.Text; using System.Threading; using System.Threading.Tasks; @@ -199,6 +199,69 @@ public virtual PageCollection GetAssistants( return PageCollectionHelpers.Create(enumerator); } + /// + /// Gets an instance representing an existing based on its ID. + /// + /// The ID of the Assistant to retrieve. + /// A token that can be used to cancel this method call. + /// An instance representing the state of the Assistant with the provided ID. + public virtual async Task> GetAssistantAsync(string assistantId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); + + ClientResult protocolResult = await GetAssistantAsync(assistantId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + return CreateResultFromProtocol(protocolResult, Assistant.FromResponse); + } + + /// + /// Gets an instance representing an existing based on its ID. + /// + /// The ID of the Assistant to retrieve. + /// A token that can be used to cancel this method call. + /// An instance representing the state of the Assistant with the provided ID. + public virtual ClientResult GetAssistant(string assistantId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); + + ClientResult protocolResult = GetAssistant(assistantId, cancellationToken.ToRequestOptions()); + return CreateResultFromProtocol(protocolResult, Assistant.FromResponse); + } + + /// + /// Modifies an existing . + /// + /// The ID of the Assistant to retrieve. + /// The new options to apply to the existing Assistant. + /// A token that can be used to cancel this method call. + /// An updated instance representing the state of the Assistant with the provided ID. + public virtual async Task> ModifyAssistantAsync(string assistantId, AssistantModificationOptions options, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); + Argument.AssertNotNull(options, nameof(options)); + + using BinaryContent content = options.ToBinaryContent(); + ClientResult protocolResult + = await ModifyAssistantAsync(assistantId, content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + return CreateResultFromProtocol(protocolResult, Assistant.FromResponse); + } + + /// + /// Modifies an existing . + /// + /// The ID of the Assistant to retrieve. + /// The new options to apply to the existing Assistant. + /// A token that can be used to cancel this method call. + /// An updated instance representing the state of the Assistant with the provided ID. + public virtual ClientResult ModifyAssistant(string assistantId, AssistantModificationOptions options, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); + Argument.AssertNotNull(options, nameof(options)); + + using BinaryContent content = options.ToBinaryContent(); + ClientResult protocolResult = ModifyAssistant(assistantId, content, null); + return CreateResultFromProtocol(protocolResult, Assistant.FromResponse); + } + /// /// Deletes an existing . /// @@ -624,77 +687,103 @@ public virtual ClientResult DeleteMessage(string threadId, string messageI /// Additional options for the run. /// A token that can be used to cancel this method call. /// A new instance. - public virtual async Task> CreateRunAsync(string threadId, string assistantId, RunCreationOptions options = null, CancellationToken cancellationToken = default) + public virtual async Task CreateRunAsync( + ReturnWhen returnWhen, + string threadId, + string assistantId, + RunCreationOptions options = null, + CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); + options ??= new(); options.AssistantId = assistantId; options.Stream = null; - ClientResult protocolResult = await CreateRunAsync(threadId, options.ToBinaryContent(), cancellationToken.ToRequestOptions()) - .ConfigureAwait(false); - return CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); + + ClientResult protocolResult = await CreateRunAsync(threadId, options.ToBinaryContent(), cancellationToken.ToRequestOptions()).ConfigureAwait(false); + ClientResult result = CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); + + RunOperation operation = new RunOperation(_pipeline, _endpoint, + value: result, + status: result.Value.Status, + result.GetRawResponse()); + + if (returnWhen == ReturnWhen.Started) + { + return operation; + } + + await operation.WaitUntilStoppedAsync().ConfigureAwait(false); + return operation; } - /// - /// Begins a new that evaluates a using a specified - /// . - /// - /// The ID of the thread that the run should evaluate. - /// The ID of the assistant that should be used when evaluating the thread. - /// Additional options for the run. - /// A token that can be used to cancel this method call. - /// A new instance. - public virtual ClientResult CreateRun(string threadId, string assistantId, RunCreationOptions options = null, CancellationToken cancellationToken = default) + public virtual RunOperation CreateRun( + ReturnWhen returnWhen, + string threadId, + string assistantId, + RunCreationOptions options = null, + CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); + options ??= new(); options.AssistantId = assistantId; options.Stream = null; + ClientResult protocolResult = CreateRun(threadId, options.ToBinaryContent(), cancellationToken.ToRequestOptions()); - return CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); + ClientResult result = CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); + + RunOperation operation = new RunOperation(_pipeline, _endpoint, + value: result, + status: result.Value.Status, + result.GetRawResponse()); + + if (returnWhen == ReturnWhen.Started) + { + return operation; + } + + operation.WaitUntilStopped(); + return operation; } - /// - /// Begins a new streaming that evaluates a using a specified - /// . - /// - /// The ID of the thread that the run should evaluate. - /// The ID of the assistant that should be used when evaluating the thread. - /// Additional options for the run. - /// A token that can be used to cancel this method call. - public virtual AsyncCollectionResult CreateRunStreamingAsync( - string threadId, - string assistantId, - RunCreationOptions options = null, + public virtual async Task ContinueRunAsync( + ContinuationToken rehydrationToken, CancellationToken cancellationToken = default) { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); + Argument.AssertNotNull(rehydrationToken, nameof(rehydrationToken)); - options ??= new(); - options.AssistantId = assistantId; - options.Stream = true; + RunOperationToken token = RunOperationToken.FromToken(rehydrationToken); + ClientResult protocolResult = await GetRunAsync(token.ThreadId, token.RunId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + ClientResult result = CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); - async Task getResultAsync() => - await CreateRunAsync(threadId, options.ToBinaryContent(), cancellationToken.ToRequestOptions(streaming: true)) - .ConfigureAwait(false); + return new RunOperation(_pipeline, _endpoint, + value: result, + status: result.Value.Status, + result.GetRawResponse()); + } + + public virtual RunOperation ContinueRun( + ContinuationToken rehydrationToken, + CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(rehydrationToken, nameof(rehydrationToken)); + + RunOperationToken token = RunOperationToken.FromToken(rehydrationToken); + ClientResult protocolResult = GetRun(token.ThreadId, token.RunId, cancellationToken.ToRequestOptions()); + ClientResult result = CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); - return new AsyncStreamingUpdateCollection(getResultAsync); + return new RunOperation(_pipeline, _endpoint, + value: result, + status: result.Value.Status, + result.GetRawResponse()); } - /// - /// Begins a new streaming that evaluates a using a specified - /// . - /// - /// The ID of the thread that the run should evaluate. - /// The ID of the assistant that should be used when evaluating the thread. - /// Additional options for the run. - /// A token that can be used to cancel this method call. - public virtual CollectionResult CreateRunStreaming( + public virtual StreamingRunOperation CreateRunStreaming( string threadId, string assistantId, RunCreationOptions options = null, @@ -707,61 +796,51 @@ public virtual CollectionResult CreateRunStreaming( options.AssistantId = assistantId; options.Stream = true; - ClientResult getResult() => CreateRun(threadId, options.ToBinaryContent(), cancellationToken.ToRequestOptions(streaming: true)); + BinaryContent content = options.ToBinaryContent(); + RequestOptions requestOptions = cancellationToken.ToRequestOptions(); - return new StreamingUpdateCollection(getResult); - } + async Task getResultAsync() => + await _runSubClient.CreateRunAsync(threadId, content, requestOptions) + .ConfigureAwait(false); - /// - /// Creates a new thread and immediately begins a run against it using the specified . - /// - /// The ID of the assistant that the new run should use. - /// Options for the new thread that will be created. - /// Additional options to apply to the run that will begin. - /// A token that can be used to cancel this method call. - /// A new . - public virtual async Task> CreateThreadAndRunAsync( - string assistantId, - ThreadCreationOptions threadOptions = null, - RunCreationOptions runOptions = null, - CancellationToken cancellationToken = default) - { - runOptions ??= new(); - runOptions.Stream = null; - BinaryContent protocolContent = CreateThreadAndRunProtocolContent(assistantId, threadOptions, runOptions); - ClientResult protocolResult = await CreateThreadAndRunAsync(protocolContent, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); + ClientResult getResult() => + _runSubClient.CreateRun(threadId, content, requestOptions); + + return new StreamingRunOperation(_pipeline, _endpoint, getResultAsync, getResult); } - /// - /// Creates a new thread and immediately begins a run against it using the specified . - /// - /// The ID of the assistant that the new run should use. - /// Options for the new thread that will be created. - /// Additional options to apply to the run that will begin. - /// A token that can be used to cancel this method call. - /// A new . - public virtual ClientResult CreateThreadAndRun( + public virtual async Task CreateThreadAndRunAsync( + ReturnWhen returnWhen, string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null, CancellationToken cancellationToken = default) { + Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); + runOptions ??= new(); + runOptions.AssistantId = assistantId; runOptions.Stream = null; - BinaryContent protocolContent = CreateThreadAndRunProtocolContent(assistantId, threadOptions, runOptions); - ClientResult protocolResult = CreateThreadAndRun(protocolContent, cancellationToken.ToRequestOptions()); - return CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); + + ClientResult protocolResult = await CreateThreadAndRunAsync(runOptions.ToBinaryContent(), cancellationToken.ToRequestOptions()).ConfigureAwait(false); + ClientResult result = CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); + + RunOperation operation = new RunOperation(_pipeline, _endpoint, + value: result, + status: result.Value.Status, + result.GetRawResponse()); + + if (returnWhen == ReturnWhen.Started) + { + return operation; + } + + await operation.WaitUntilStoppedAsync().ConfigureAwait(false); + return operation; } - /// - /// Creates a new thread and immediately begins a streaming run against it using the specified . - /// - /// The ID of the assistant that the new run should use. - /// Options for the new thread that will be created. - /// Additional options to apply to the run that will begin. - /// A token that can be used to cancel this method call. - public virtual AsyncCollectionResult CreateThreadAndRunStreamingAsync( + public virtual RunOperation CreateThreadAndRun( + ReturnWhen returnWhen, string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null, @@ -770,24 +849,27 @@ public virtual AsyncCollectionResult CreateThreadAndRunStreamin Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); runOptions ??= new(); - runOptions.Stream = true; - BinaryContent protocolContent = CreateThreadAndRunProtocolContent(assistantId, threadOptions, runOptions); + runOptions.AssistantId = assistantId; + runOptions.Stream = null; - async Task getResultAsync() => - await CreateThreadAndRunAsync(protocolContent, cancellationToken.ToRequestOptions(streaming: true)) - .ConfigureAwait(false); + ClientResult protocolResult = CreateThreadAndRun(runOptions.ToBinaryContent(), cancellationToken.ToRequestOptions()); + ClientResult result = CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); + + RunOperation operation = new RunOperation(_pipeline, _endpoint, + value: result, + status: result.Value.Status, + result.GetRawResponse()); + + if (returnWhen == ReturnWhen.Started) + { + return operation; + } - return new AsyncStreamingUpdateCollection(getResultAsync); + operation.WaitUntilStopped(); + return operation; } - /// - /// Creates a new thread and immediately begins a streaming run against it using the specified . - /// - /// The ID of the assistant that the new run should use. - /// Options for the new thread that will be created. - /// Additional options to apply to the run that will begin. - /// A token that can be used to cancel this method call. - public virtual CollectionResult CreateThreadAndRunStreaming( + public virtual StreamingRunOperation CreateThreadAndRunStreaming( string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null, @@ -797,11 +879,18 @@ public virtual CollectionResult CreateThreadAndRunStreaming( runOptions ??= new(); runOptions.Stream = true; + BinaryContent protocolContent = CreateThreadAndRunProtocolContent(assistantId, threadOptions, runOptions); + RequestOptions requestOptions = cancellationToken.ToRequestOptions(); - ClientResult getResult() => CreateThreadAndRun(protocolContent, cancellationToken.ToRequestOptions(streaming: true)); + async Task getResultAsync() => + await _runSubClient.CreateThreadAndRunAsync(protocolContent, requestOptions) + .ConfigureAwait(false); + + ClientResult getResult() => + _runSubClient.CreateThreadAndRun(protocolContent, requestOptions); - return new StreamingUpdateCollection(getResult); + return new StreamingRunOperation(_pipeline, _endpoint, getResultAsync, getResult); } /// @@ -914,321 +1003,6 @@ public virtual PageCollection GetRuns( return PageCollectionHelpers.Create(enumerator); } - /// - /// Gets an existing from a known . - /// - /// The ID of the thread to retrieve the run from. - /// The ID of the run to retrieve. - /// A token that can be used to cancel this method call. - /// The existing instance. - public virtual async Task> GetRunAsync(string threadId, string runId, CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - - ClientResult protocolResult = await GetRunAsync(threadId, runId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); - } - - /// - /// Gets an existing from a known . - /// - /// The ID of the thread to retrieve the run from. - /// The ID of the run to retrieve. - /// A token that can be used to cancel this method call. - /// The existing instance. - public virtual ClientResult GetRun(string threadId, string runId, CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - - ClientResult protocolResult = GetRun(threadId, runId, cancellationToken.ToRequestOptions()); - return CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); - } - - /// - /// Submits a collection of required tool call outputs to a run and resumes the run. - /// - /// The thread ID of the thread being run. - /// The ID of the run that reached a requires_action status. - /// - /// The tool outputs, corresponding to instances from the run. - /// - /// A token that can be used to cancel this method call. - /// The , updated after the submission was processed. - public virtual async Task> SubmitToolOutputsToRunAsync( - string threadId, - string runId, - IEnumerable toolOutputs, - CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - - BinaryContent content = new InternalSubmitToolOutputsRunRequest(toolOutputs).ToBinaryContent(); - ClientResult protocolResult = await SubmitToolOutputsToRunAsync(threadId, runId, content, cancellationToken.ToRequestOptions()) - .ConfigureAwait(false); - return CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); - } - - /// - /// Submits a collection of required tool call outputs to a run and resumes the run. - /// - /// The thread ID of the thread being run. - /// The ID of the run that reached a requires_action status. - /// - /// The tool outputs, corresponding to instances from the run. - /// - /// A token that can be used to cancel this method call. - /// The , updated after the submission was processed. - public virtual ClientResult SubmitToolOutputsToRun( - string threadId, - string runId, - IEnumerable toolOutputs, - CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - - BinaryContent content = new InternalSubmitToolOutputsRunRequest(toolOutputs).ToBinaryContent(); - ClientResult protocolResult = SubmitToolOutputsToRun(threadId, runId, content, cancellationToken.ToRequestOptions()); - return CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); - } - - /// - /// Submits a collection of required tool call outputs to a run and resumes the run with streaming enabled. - /// - /// The thread ID of the thread being run. - /// The ID of the run that reached a requires_action status. - /// - /// The tool outputs, corresponding to instances from the run. - /// - /// A token that can be used to cancel this method call. - public virtual AsyncCollectionResult SubmitToolOutputsToRunStreamingAsync( - string threadId, - string runId, - IEnumerable toolOutputs, - CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - - BinaryContent content = new InternalSubmitToolOutputsRunRequest(toolOutputs.ToList(), stream: true, null) - .ToBinaryContent(); - - async Task getResultAsync() => - await SubmitToolOutputsToRunAsync(threadId, runId, content, cancellationToken.ToRequestOptions(streaming: true)) - .ConfigureAwait(false); - - return new AsyncStreamingUpdateCollection(getResultAsync); - } - - /// - /// Submits a collection of required tool call outputs to a run and resumes the run with streaming enabled. - /// - /// The thread ID of the thread being run. - /// The ID of the run that reached a requires_action status. - /// - /// The tool outputs, corresponding to instances from the run. - /// - /// A token that can be used to cancel this method call. - public virtual CollectionResult SubmitToolOutputsToRunStreaming( - string threadId, - string runId, - IEnumerable toolOutputs, - CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - - BinaryContent content = new InternalSubmitToolOutputsRunRequest(toolOutputs.ToList(), stream: true, null) - .ToBinaryContent(); - - ClientResult getResult() => SubmitToolOutputsToRun(threadId, runId, content, cancellationToken.ToRequestOptions(streaming: true)); - - return new StreamingUpdateCollection(getResult); - } - - /// - /// Cancels an in-progress . - /// - /// The ID of the thread associated with the run. - /// The ID of the run to cancel. - /// A token that can be used to cancel this method call. - /// An updated instance, reflecting the new status of the run. - public virtual async Task> CancelRunAsync(string threadId, string runId, CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - - ClientResult protocolResult = await CancelRunAsync(threadId, runId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); - } - - /// - /// Cancels an in-progress . - /// - /// The ID of the thread associated with the run. - /// The ID of the run to cancel. - /// A token that can be used to cancel this method call. - /// An updated instance, reflecting the new status of the run. - public virtual ClientResult CancelRun(string threadId, string runId, CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - - ClientResult protocolResult = CancelRun(threadId, runId, cancellationToken.ToRequestOptions()); - return CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); - } - - /// - /// Gets a page collection holding instances associated with a . - /// - /// The ID of the thread associated with the run. - /// The ID of the run to list run steps from. - /// - /// A token that can be used to cancel this method call. - /// holds pages of values. To obtain a collection of values, call - /// . To obtain the current - /// page of values, call . - /// A collection of pages of . - public virtual AsyncPageCollection GetRunStepsAsync( - string threadId, - string runId, - RunStepCollectionOptions options = default, - CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - - RunStepsPageEnumerator enumerator = new(_pipeline, _endpoint, - threadId, - runId, - options?.PageSize, - options?.Order?.ToString(), - options?.AfterId, - options?.BeforeId, - cancellationToken.ToRequestOptions()); - - return PageCollectionHelpers.CreateAsync(enumerator); - } - - /// - /// Rehydrates a page collection holding instances from a page token. - /// - /// Page token corresponding to the first page of the collection to rehydrate. - /// A token that can be used to cancel this method call. - /// holds pages of values. To obtain a collection of values, call - /// . To obtain the current - /// page of values, call . - /// A collection of pages of . - public virtual AsyncPageCollection GetRunStepsAsync( - ContinuationToken firstPageToken, - CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(firstPageToken, nameof(firstPageToken)); - - RunStepsPageToken pageToken = RunStepsPageToken.FromToken(firstPageToken); - RunStepsPageEnumerator enumerator = new(_pipeline, _endpoint, - pageToken.ThreadId, - pageToken.RunId, - pageToken.Limit, - pageToken.Order, - pageToken.After, - pageToken.Before, - cancellationToken.ToRequestOptions()); - - return PageCollectionHelpers.CreateAsync(enumerator); - } - - /// - /// Gets a page collection holding instances associated with a . - /// - /// The ID of the thread associated with the run. - /// The ID of the run to list run steps from. - /// - /// A token that can be used to cancel this method call. - /// holds pages of values. To obtain a collection of values, call - /// . To obtain the current - /// page of values, call . - /// A collection of pages of . - public virtual PageCollection GetRunSteps( - string threadId, - string runId, - RunStepCollectionOptions options = default, - CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - - RunStepsPageEnumerator enumerator = new(_pipeline, _endpoint, - threadId, - runId, - options?.PageSize, - options?.Order?.ToString(), - options?.AfterId, - options?.BeforeId, - cancellationToken.ToRequestOptions()); - - return PageCollectionHelpers.Create(enumerator); - } - - /// - /// Rehydrates a page collection holding instances from a page token. - /// - /// Page token corresponding to the first page of the collection to rehydrate. - /// A token that can be used to cancel this method call. - /// holds pages of values. To obtain a collection of values, call - /// . To obtain the current - /// page of values, call . - /// A collection of pages of . - public virtual PageCollection GetRunSteps( - ContinuationToken firstPageToken, - CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(firstPageToken, nameof(firstPageToken)); - - RunStepsPageToken pageToken = RunStepsPageToken.FromToken(firstPageToken); - RunStepsPageEnumerator enumerator = new(_pipeline, _endpoint, - pageToken.ThreadId, - pageToken.RunId, - pageToken.Limit, - pageToken.Order, - pageToken.After, - pageToken.Before, - cancellationToken.ToRequestOptions()); - - return PageCollectionHelpers.Create(enumerator); - } - - /// - /// Gets a single run step from a run. - /// - /// The ID of the thread associated with the run. - /// The ID of the run. - /// The ID of the run step. - /// A token that can be used to cancel this method call. - /// A instance corresponding to the specified step. - public virtual async Task> GetRunStepAsync(string threadId, string runId, string stepId, CancellationToken cancellationToken = default) - { - ClientResult protocolResult = await GetRunStepAsync(threadId, runId, stepId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return CreateResultFromProtocol(protocolResult, RunStep.FromResponse); - } - - /// - /// Gets a single run step from a run. - /// - /// The ID of the thread associated with the run. - /// The ID of the run. - /// The ID of the run step. - /// A token that can be used to cancel this method call. - /// A instance corresponding to the specified step. - public virtual ClientResult GetRunStep(string threadId, string runId, string stepId, CancellationToken cancellationToken = default) - { - ClientResult protocolResult = GetRunStep(threadId, runId, stepId, cancellationToken.ToRequestOptions()); - return CreateResultFromProtocol(protocolResult, RunStep.FromResponse); - } - private static BinaryContent CreateThreadAndRunProtocolContent( string assistantId, ThreadCreationOptions threadOptions, diff --git a/src/Custom/Assistants/AssistantCollectionOptions.cs b/src/Custom/Assistants/AssistantCollectionOptions.cs index 731401eff..c7baa96d1 100644 --- a/src/Custom/Assistants/AssistantCollectionOptions.cs +++ b/src/Custom/Assistants/AssistantCollectionOptions.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Assistants; +namespace OpenAI.Assistants; /// /// Represents addition options available when requesting a collection of instances. @@ -14,20 +14,20 @@ public AssistantCollectionOptions() { } /// The order that results should appear in the list according to /// their created_at timestamp. /// - public ListOrder? Order { get; init; } + public ListOrder? Order { get; set; } /// /// The number of values to return in a page result. /// - public int? PageSize { get; init; } + public int? PageSize { get; set; } /// /// The id of the item preceeding the first item in the collection. /// - public string AfterId { get; init; } + public string AfterId { get; set; } /// /// The id of the item following the last item in the collection. /// - public string BeforeId { get; init; } + public string BeforeId { get; set; } } diff --git a/src/Custom/Assistants/AssistantCreationOptions.cs b/src/Custom/Assistants/AssistantCreationOptions.cs index d9fbe5746..c00b6e82e 100644 --- a/src/Custom/Assistants/AssistantCreationOptions.cs +++ b/src/Custom/Assistants/AssistantCreationOptions.cs @@ -23,11 +23,11 @@ public partial class AssistantCreationOptions /// [CodeGenMember("ToolResources")] - public ToolResources ToolResources { get; init; } + public ToolResources ToolResources { get; set; } /// [CodeGenMember("ResponseFormat")] - public AssistantResponseFormat ResponseFormat { get; init; } + public AssistantResponseFormat ResponseFormat { get; set; } /// /// An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. @@ -35,7 +35,7 @@ public partial class AssistantCreationOptions /// We generally recommend altering this or temperature but not both. /// [CodeGenMember("TopP")] - public float? NucleusSamplingFactor { get; init; } + public float? NucleusSamplingFactor { get; set; } internal AssistantCreationOptions(InternalCreateAssistantRequestModel model) : this() diff --git a/src/Custom/Assistants/AssistantModificationOptions.cs b/src/Custom/Assistants/AssistantModificationOptions.cs index 51d6e756b..bbd8b2efb 100644 --- a/src/Custom/Assistants/AssistantModificationOptions.cs +++ b/src/Custom/Assistants/AssistantModificationOptions.cs @@ -11,7 +11,7 @@ public partial class AssistantModificationOptions /// /// The replacement model that the assistant should use. /// - public string Model { get; init; } + public string Model { get; set; } /// /// @@ -20,18 +20,18 @@ public partial class AssistantModificationOptions /// There can be a maximum of 128 tools per assistant. Tools can be of types `code_interpreter`, `file_search`, or `function`. /// [CodeGenMember("Tools")] - public IList DefaultTools { get; init; } = new ChangeTrackingList(); + public IList DefaultTools { get; set; } = new ChangeTrackingList(); // CUSTOM: reuse common request/response models for tool resources. Note that modification operations use the // response models (which do not contain resource initialization helpers). /// [CodeGenMember("ToolResources")] - public ToolResources ToolResources { get; init; } + public ToolResources ToolResources { get; set; } /// [CodeGenMember("ResponseFormat")] - public AssistantResponseFormat ResponseFormat { get; init; } + public AssistantResponseFormat ResponseFormat { get; set; } /// /// An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. @@ -39,5 +39,5 @@ public partial class AssistantModificationOptions /// We generally recommend altering this or temperature but not both. /// [CodeGenMember("TopP")] - public float? NucleusSamplingFactor { get; init; } + public float? NucleusSamplingFactor { get; set; } } \ No newline at end of file diff --git a/src/Custom/Assistants/AssistantResponseFormat.Serialization.cs b/src/Custom/Assistants/AssistantResponseFormat.Serialization.cs index 2dd18f018..19b3c5b01 100644 --- a/src/Custom/Assistants/AssistantResponseFormat.Serialization.cs +++ b/src/Custom/Assistants/AssistantResponseFormat.Serialization.cs @@ -34,7 +34,7 @@ internal static void SerializeAssistantResponseFormat(AssistantResponseFormat fo writer.WriteStartObject(); writer.WritePropertyName("type"u8); writer.WriteStringValue(formatInstance._objectType); - writer.WriteSerializedAdditionalRawData(formatInstance._serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(formatInstance.SerializedAdditionalRawData, options); writer.WriteEndObject(); } } diff --git a/src/Custom/Assistants/AssistantResponseFormat.cs b/src/Custom/Assistants/AssistantResponseFormat.cs index 76d257b4d..226fa31df 100644 --- a/src/Custom/Assistants/AssistantResponseFormat.cs +++ b/src/Custom/Assistants/AssistantResponseFormat.cs @@ -20,7 +20,7 @@ public partial class AssistantResponseFormat { private readonly string _plainTextValue; private readonly string _objectType; - private readonly IDictionary _serializedAdditionalRawData; + private readonly IDictionary SerializedAdditionalRawData; private const string AutoValue = "auto"; private const string TextValue = "text"; @@ -62,7 +62,7 @@ internal AssistantResponseFormat(string plainTextValue, string objectType, IDict { _plainTextValue = plainTextValue; _objectType = objectType; - _serializedAdditionalRawData = serializedAdditionalRawData ?? new ChangeTrackingDictionary(); + SerializedAdditionalRawData = serializedAdditionalRawData ?? new ChangeTrackingDictionary(); } /// diff --git a/src/Custom/Assistants/AssistantThread.cs b/src/Custom/Assistants/AssistantThread.cs index df31e929c..376766668 100644 --- a/src/Custom/Assistants/AssistantThread.cs +++ b/src/Custom/Assistants/AssistantThread.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Assistants; +namespace OpenAI.Assistants; [CodeGenModel("ThreadObject")] public partial class AssistantThread diff --git a/src/To.Be.Generated/AssistantsPageEnumerator.cs b/src/Custom/Assistants/AssistantsPageEnumerator.cs similarity index 99% rename from src/To.Be.Generated/AssistantsPageEnumerator.cs rename to src/Custom/Assistants/AssistantsPageEnumerator.cs index 15dbcc2dc..634dd6b15 100644 --- a/src/To.Be.Generated/AssistantsPageEnumerator.cs +++ b/src/Custom/Assistants/AssistantsPageEnumerator.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Text.Json; diff --git a/src/To.Be.Generated/AssistantsPageToken.cs b/src/Custom/Assistants/AssistantsPageToken.cs similarity index 99% rename from src/To.Be.Generated/AssistantsPageToken.cs rename to src/Custom/Assistants/AssistantsPageToken.cs index 251e8a421..5cb19ed54 100644 --- a/src/To.Be.Generated/AssistantsPageToken.cs +++ b/src/Custom/Assistants/AssistantsPageToken.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.Diagnostics; using System.IO; diff --git a/src/Custom/Assistants/CodeInterpreterToolDefinition.Serialization.cs b/src/Custom/Assistants/CodeInterpreterToolDefinition.Serialization.cs index bbec0065f..6318e87c7 100644 --- a/src/Custom/Assistants/CodeInterpreterToolDefinition.Serialization.cs +++ b/src/Custom/Assistants/CodeInterpreterToolDefinition.Serialization.cs @@ -20,7 +20,7 @@ protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOption writer.WriteStartObject(); writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); - writer.WriteSerializedAdditionalRawData(_serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(SerializedAdditionalRawData, options); writer.WriteEndObject(); } } \ No newline at end of file diff --git a/src/Custom/Assistants/CodeInterpreterToolResources.cs b/src/Custom/Assistants/CodeInterpreterToolResources.cs index 55922e849..82f354922 100644 --- a/src/Custom/Assistants/CodeInterpreterToolResources.cs +++ b/src/Custom/Assistants/CodeInterpreterToolResources.cs @@ -12,7 +12,7 @@ public partial class CodeInterpreterToolResources public IList FileIds { get => _fileIds; - init + set { _fileIds = new ChangeTrackingList(); foreach (string fileId in value) diff --git a/src/Custom/Assistants/FileSearchToolDefinition.Serialization.cs b/src/Custom/Assistants/FileSearchToolDefinition.Serialization.cs index 21dac0e72..19cd98074 100644 --- a/src/Custom/Assistants/FileSearchToolDefinition.Serialization.cs +++ b/src/Custom/Assistants/FileSearchToolDefinition.Serialization.cs @@ -20,7 +20,15 @@ protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOption writer.WriteStartObject(); writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); - writer.WriteSerializedAdditionalRawData(_serializedAdditionalRawData, options); + if (Optional.IsDefined(MaxResults)) + { + writer.WritePropertyName("file_search"u8); + writer.WriteStartObject(); + writer.WritePropertyName("max_num_results"u8); + writer.WriteNumberValue(MaxResults.Value); + writer.WriteEndObject(); + } + writer.WriteSerializedAdditionalRawData(SerializedAdditionalRawData, options); writer.WriteEndObject(); } } diff --git a/src/Custom/Assistants/FileSearchToolDefinition.cs b/src/Custom/Assistants/FileSearchToolDefinition.cs index cfad3e720..2bc8efff7 100644 --- a/src/Custom/Assistants/FileSearchToolDefinition.cs +++ b/src/Custom/Assistants/FileSearchToolDefinition.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -10,8 +10,8 @@ public partial class FileSearchToolDefinition : ToolDefinition { public int? MaxResults { - get => _fileSearch.InternalMaxNumResults; - init => _fileSearch.InternalMaxNumResults = value; + get => _fileSearch?.InternalMaxNumResults; + set => _fileSearch.InternalMaxNumResults = value; } /// diff --git a/src/Custom/Assistants/FileSearchToolResources.cs b/src/Custom/Assistants/FileSearchToolResources.cs index 52c24b16f..66c0a1d43 100644 --- a/src/Custom/Assistants/FileSearchToolResources.cs +++ b/src/Custom/Assistants/FileSearchToolResources.cs @@ -14,7 +14,7 @@ public partial class FileSearchToolResources public IList VectorStoreIds { get => _vectorStoreIds; - init + set { _vectorStoreIds = new ChangeTrackingList(); foreach (string item in value) diff --git a/src/Custom/Assistants/FunctionToolDefinition.Serialization.cs b/src/Custom/Assistants/FunctionToolDefinition.Serialization.cs index 7ef4df61c..701725671 100644 --- a/src/Custom/Assistants/FunctionToolDefinition.Serialization.cs +++ b/src/Custom/Assistants/FunctionToolDefinition.Serialization.cs @@ -22,7 +22,7 @@ protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOption writer.WriteObjectValue(_internalFunction, options); writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); - writer.WriteSerializedAdditionalRawData(_serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(SerializedAdditionalRawData, options); writer.WriteEndObject(); } } \ No newline at end of file diff --git a/src/Custom/Assistants/FunctionToolDefinition.cs b/src/Custom/Assistants/FunctionToolDefinition.cs index 862af47e9..764e93ccf 100644 --- a/src/Custom/Assistants/FunctionToolDefinition.cs +++ b/src/Custom/Assistants/FunctionToolDefinition.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -17,21 +17,21 @@ public partial class FunctionToolDefinition : ToolDefinition public required string FunctionName { get => _internalFunction.Name; - init => _internalFunction.Name = value; + set => _internalFunction.Name = value; } /// public string Description { get => _internalFunction.Description; - init => _internalFunction.Description = value; + set => _internalFunction.Description = value; } /// public BinaryData Parameters { get => _internalFunction.Parameters; - init => _internalFunction.Parameters = value; + set => _internalFunction.Parameters = value; } /// diff --git a/src/Custom/Assistants/GeneratorStubs.cs b/src/Custom/Assistants/GeneratorStubs.cs index 8961646e9..9efb3dfb5 100644 --- a/src/Custom/Assistants/GeneratorStubs.cs +++ b/src/Custom/Assistants/GeneratorStubs.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Assistants; +namespace OpenAI.Assistants; /* * This file stubs and performs minimal customization to generated public types for the OpenAI.Assistants namespace diff --git a/src/Custom/Assistants/Internal/GeneratorStubs.Internal.cs b/src/Custom/Assistants/Internal/GeneratorStubs.Internal.cs index c67b31497..22f86b4d4 100644 --- a/src/Custom/Assistants/Internal/GeneratorStubs.Internal.cs +++ b/src/Custom/Assistants/Internal/GeneratorStubs.Internal.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Assistants; +namespace OpenAI.Assistants; /* * This file stubs and performs minimal customization to generated internal types for the OpenAI.Assistants namespace. @@ -343,9 +343,6 @@ internal readonly partial struct InternalCreateRunRequestModel { } [CodeGenModel("CreateRunRequestToolChoice")] internal readonly partial struct InternalCreateRunRequestToolChoice { } -[CodeGenModel("CreateThreadAndRunRequestModel")] -internal readonly partial struct InternalCreateThreadAndRunRequestModel { } - [CodeGenModel("CreateAssistantRequestResponseFormat1")] internal readonly partial struct InternalCreateAssistantRequestResponseFormat { } @@ -364,6 +361,15 @@ internal partial class InternalCreateAssistantRequestToolResourcesFileSearchVect [CodeGenModel("CreateAssistantRequestToolResourcesFileSearchVectorStoreIdReferences")] internal partial class InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreIdReferences { } +[CodeGenModel("CreateThreadAndRunRequestModel")] +internal readonly partial struct InternalCreateThreadAndRunRequestModel { } + +[CodeGenModel("CreateThreadAndRunRequestResponseFormat")] +internal readonly partial struct InternalCreateThreadAndRunRequestResponseFormat { } + +[CodeGenModel("CreateThreadAndRunRequestToolChoice")] +internal readonly partial struct InternalCreateThreadAndRunRequestToolChoice { } + [CodeGenModel("CreateThreadAndRunRequestToolResources")] internal partial class InternalCreateThreadAndRunRequestToolResources { } diff --git a/src/Custom/Assistants/Internal/InternalAssistantRunClient.Protocol.cs b/src/Custom/Assistants/Internal/InternalAssistantRunClient.Protocol.cs index 4ffef5d1b..865ba7b32 100644 --- a/src/Custom/Assistants/Internal/InternalAssistantRunClient.Protocol.cs +++ b/src/Custom/Assistants/Internal/InternalAssistantRunClient.Protocol.cs @@ -158,194 +158,4 @@ public virtual ClientResult GetRun(string threadId, string runId, RequestOptions using PipelineMessage message = CreateGetRunRequest(threadId, runId, options); return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); } - - /// - /// [Protocol Method] Modifies a run. - /// - /// The ID of the [thread](/docs/api-reference/threads) that was run. - /// The ID of the run to modify. - /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// , or is null. - /// or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual async Task ModifyRunAsync(string threadId, string runId, BinaryContent content, RequestOptions options = null) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - Argument.AssertNotNull(content, nameof(content)); - - using PipelineMessage message = CreateModifyRunRequest(threadId, runId, content, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - - /// - /// [Protocol Method] Modifies a run. - /// - /// The ID of the [thread](/docs/api-reference/threads) that was run. - /// The ID of the run to modify. - /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// , or is null. - /// or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual ClientResult ModifyRun(string threadId, string runId, BinaryContent content, RequestOptions options = null) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - Argument.AssertNotNull(content, nameof(content)); - - using PipelineMessage message = CreateModifyRunRequest(threadId, runId, content, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - /// - /// [Protocol Method] Cancels a run that is `in_progress`. - /// - /// The ID of the thread to which this run belongs. - /// The ID of the run to cancel. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// or is null. - /// or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual async Task CancelRunAsync(string threadId, string runId, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - - using PipelineMessage message = CreateCancelRunRequest(threadId, runId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - - /// - /// [Protocol Method] Cancels a run that is `in_progress`. - /// - /// The ID of the thread to which this run belongs. - /// The ID of the run to cancel. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// or is null. - /// or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual ClientResult CancelRun(string threadId, string runId, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - - using PipelineMessage message = CreateCancelRunRequest(threadId, runId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - /// - /// [Protocol Method] When a run has the `status: "requires_action"` and `required_action.type` is - /// `submit_tool_outputs`, this endpoint can be used to submit the outputs from the tool calls once - /// they're all completed. All outputs must be submitted in a single request. - /// - /// The ID of the [thread](/docs/api-reference/threads) to which this run belongs. - /// The ID of the run that requires the tool output submission. - /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// , or is null. - /// or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual async Task SubmitToolOutputsToRunAsync(string threadId, string runId, BinaryContent content, RequestOptions options = null) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - Argument.AssertNotNull(content, nameof(content)); - - PipelineMessage message = null; - try - { - message = CreateSubmitToolOutputsToRunRequest(threadId, runId, content, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - finally - { - if (options?.BufferResponse != false) - { - message.Dispose(); - } - } - } - - /// - /// [Protocol Method] When a run has the `status: "requires_action"` and `required_action.type` is - /// `submit_tool_outputs`, this endpoint can be used to submit the outputs from the tool calls once - /// they're all completed. All outputs must be submitted in a single request. - /// - /// The ID of the [thread](/docs/api-reference/threads) to which this run belongs. - /// The ID of the run that requires the tool output submission. - /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// , or is null. - /// or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual ClientResult SubmitToolOutputsToRun(string threadId, string runId, BinaryContent content, RequestOptions options = null) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - Argument.AssertNotNull(content, nameof(content)); - - PipelineMessage message = null; - try - { - message = CreateSubmitToolOutputsToRunRequest(threadId, runId, content, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - finally - { - if (options?.BufferResponse != false) - { - message.Dispose(); - } - } - } - - /// - /// [Protocol Method] Retrieves a run step. - /// - /// The ID of the thread to which the run and run step belongs. - /// The ID of the run to which the run step belongs. - /// The ID of the run step to retrieve. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// , or is null. - /// , or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual async Task GetRunStepAsync(string threadId, string runId, string stepId, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - Argument.AssertNotNullOrEmpty(stepId, nameof(stepId)); - - using PipelineMessage message = CreateGetRunStepRequest(threadId, runId, stepId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - - /// - /// [Protocol Method] Retrieves a run step. - /// - /// The ID of the thread to which the run and run step belongs. - /// The ID of the run to which the run step belongs. - /// The ID of the run step to retrieve. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// , or is null. - /// , or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual ClientResult GetRunStep(string threadId, string runId, string stepId, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - Argument.AssertNotNullOrEmpty(stepId, nameof(stepId)); - - using PipelineMessage message = CreateGetRunStepRequest(threadId, runId, stepId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } } diff --git a/src/Custom/Assistants/Internal/InternalMessageImageFileContent.Serialization.cs b/src/Custom/Assistants/Internal/InternalMessageImageFileContent.Serialization.cs index b37fe1ce4..c6dd038a1 100644 --- a/src/Custom/Assistants/Internal/InternalMessageImageFileContent.Serialization.cs +++ b/src/Custom/Assistants/Internal/InternalMessageImageFileContent.Serialization.cs @@ -22,7 +22,7 @@ protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOption writer.WriteStringValue(_type); writer.WritePropertyName("image_file"u8); writer.WriteObjectValue(_imageFile, options); - writer.WriteSerializedAdditionalRawData(_serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(SerializedAdditionalRawData, options); writer.WriteEndObject(); } } diff --git a/src/Custom/Assistants/Internal/InternalMessageImageUrlContent.Serialization.cs b/src/Custom/Assistants/Internal/InternalMessageImageUrlContent.Serialization.cs index cb8938ca4..48d0f7751 100644 --- a/src/Custom/Assistants/Internal/InternalMessageImageUrlContent.Serialization.cs +++ b/src/Custom/Assistants/Internal/InternalMessageImageUrlContent.Serialization.cs @@ -22,7 +22,7 @@ protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOption writer.WriteStringValue(_type); writer.WritePropertyName("image_url"u8); writer.WriteObjectValue(_imageUrl, options); - writer.WriteSerializedAdditionalRawData(_serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(SerializedAdditionalRawData, options); writer.WriteEndObject(); } } \ No newline at end of file diff --git a/src/Custom/Assistants/Internal/InternalRequestMessageTextContent.Serialization.cs b/src/Custom/Assistants/Internal/InternalRequestMessageTextContent.Serialization.cs index 6bbb6e101..565c34ee4 100644 --- a/src/Custom/Assistants/Internal/InternalRequestMessageTextContent.Serialization.cs +++ b/src/Custom/Assistants/Internal/InternalRequestMessageTextContent.Serialization.cs @@ -22,7 +22,7 @@ protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOption writer.WriteStringValue(Type.ToString()); writer.WritePropertyName("text"u8); writer.WriteStringValue(InternalText); - writer.WriteSerializedAdditionalRawData(_serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(SerializedAdditionalRawData, options); writer.WriteEndObject(); } } diff --git a/src/Custom/Assistants/Internal/InternalResponseMessageTextContent.Serialization.cs b/src/Custom/Assistants/Internal/InternalResponseMessageTextContent.Serialization.cs index 9a3f93de7..d0415ca27 100644 --- a/src/Custom/Assistants/Internal/InternalResponseMessageTextContent.Serialization.cs +++ b/src/Custom/Assistants/Internal/InternalResponseMessageTextContent.Serialization.cs @@ -22,7 +22,7 @@ protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOption writer.WriteStringValue(_type); writer.WritePropertyName("text"u8); writer.WriteObjectValue(_text, options); - writer.WriteSerializedAdditionalRawData(_serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(SerializedAdditionalRawData, options); writer.WriteEndObject(); } } diff --git a/src/Custom/Assistants/Internal/UnknownAssistantToolDefinition.Serialization.cs b/src/Custom/Assistants/Internal/UnknownAssistantToolDefinition.Serialization.cs index 230b8df01..3a80df55e 100644 --- a/src/Custom/Assistants/Internal/UnknownAssistantToolDefinition.Serialization.cs +++ b/src/Custom/Assistants/Internal/UnknownAssistantToolDefinition.Serialization.cs @@ -20,7 +20,7 @@ protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOption writer.WriteStartObject(); writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); - writer.WriteSerializedAdditionalRawData(_serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(SerializedAdditionalRawData, options); writer.WriteEndObject(); } } diff --git a/src/Custom/Assistants/MessageCollectionOptions.cs b/src/Custom/Assistants/MessageCollectionOptions.cs index 213d58419..ac4bf2215 100644 --- a/src/Custom/Assistants/MessageCollectionOptions.cs +++ b/src/Custom/Assistants/MessageCollectionOptions.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Assistants; +namespace OpenAI.Assistants; /// /// Represents addition options available when requesting a collection of instances. @@ -14,20 +14,20 @@ public MessageCollectionOptions() { } /// The order that results should appear in the list according to /// their created_at timestamp. /// - public ListOrder? Order { get; init; } + public ListOrder? Order { get; set; } /// /// The number of values to return in a page result. /// - public int? PageSize { get; init; } + public int? PageSize { get; set; } /// /// The id of the item preceeding the first item in the collection. /// - public string AfterId { get; init; } + public string AfterId { get; set; } /// /// The id of the item following the last item in the collection. /// - public string BeforeId { get; init; } + public string BeforeId { get; set; } } diff --git a/src/Custom/Assistants/MessageContent.cs b/src/Custom/Assistants/MessageContent.cs index 51cac7865..a32b8e982 100644 --- a/src/Custom/Assistants/MessageContent.cs +++ b/src/Custom/Assistants/MessageContent.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; namespace OpenAI.Assistants; diff --git a/src/Custom/Assistants/MessageImageDetail.cs b/src/Custom/Assistants/MessageImageDetail.cs index 1fda9cf67..17cc7827e 100644 --- a/src/Custom/Assistants/MessageImageDetail.cs +++ b/src/Custom/Assistants/MessageImageDetail.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Assistants; +namespace OpenAI.Assistants; /// /// The available detail settings to use when processing an image. diff --git a/src/Custom/Assistants/MessageTextContentAnnotation.cs b/src/Custom/Assistants/MessageTextContentAnnotation.cs deleted file mode 100644 index 5903fc920..000000000 --- a/src/Custom/Assistants/MessageTextContentAnnotation.cs +++ /dev/null @@ -1,38 +0,0 @@ -namespace OpenAI.Assistants; - -public class MessageTextContentAnnotation -{ - private readonly MessageContentTextAnnotationsFileCitationObject _fileSearchCitation; - private readonly MessageContentTextAnnotationsFilePathObject _codeCitation; - - /// - /// The ID of the file cited by the file_search tool for this annotation. - /// - public string InputFileId => _fileSearchCitation?.FileCitation?.FileId; - - /// - /// The ID of the file that was generated by the code_interpreter tool for this citation. - /// - public string OutputFileId => _codeCitation?.FilePath?.FileId; - - /// - /// The index in the message content at which the citation begins. - /// - public int StartIndex => _fileSearchCitation?.StartIndex ?? _codeCitation?.StartIndex ?? -1; - - /// - /// The index in the message content at which the citation ends. - /// - public int EndIndex => _fileSearchCitation?.EndIndex ?? _codeCitation?.EndIndex ?? -1; - - /// - /// The text in the message content that should be replaced. - /// - public string TextToReplace => _fileSearchCitation?.Text ?? _codeCitation?.Text; - - internal MessageTextContentAnnotation(MessageContentTextObjectAnnotation internalAnnotation) - { - _fileSearchCitation = internalAnnotation as MessageContentTextAnnotationsFileCitationObject; - _codeCitation = internalAnnotation as MessageContentTextAnnotationsFilePathObject; ; - } -} \ No newline at end of file diff --git a/src/To.Be.Generated/MessagesPageEnumerator.cs b/src/Custom/Assistants/MessagesPageEnumerator.cs similarity index 99% rename from src/To.Be.Generated/MessagesPageEnumerator.cs rename to src/Custom/Assistants/MessagesPageEnumerator.cs index a4a262c33..c8ee06035 100644 --- a/src/To.Be.Generated/MessagesPageEnumerator.cs +++ b/src/Custom/Assistants/MessagesPageEnumerator.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Text.Json; diff --git a/src/To.Be.Generated/MessagesPageToken.cs b/src/Custom/Assistants/MessagesPageToken.cs similarity index 99% rename from src/To.Be.Generated/MessagesPageToken.cs rename to src/Custom/Assistants/MessagesPageToken.cs index b11bca627..ff4bfa9fa 100644 --- a/src/To.Be.Generated/MessagesPageToken.cs +++ b/src/Custom/Assistants/MessagesPageToken.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.Diagnostics; using System.IO; diff --git a/src/Custom/Assistants/RunCollectionOptions.cs b/src/Custom/Assistants/RunCollectionOptions.cs index d99f1a4b6..f64482328 100644 --- a/src/Custom/Assistants/RunCollectionOptions.cs +++ b/src/Custom/Assistants/RunCollectionOptions.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Assistants; +namespace OpenAI.Assistants; /// /// Represents addition options available when requesting a collection of instances. @@ -14,20 +14,20 @@ public RunCollectionOptions() { } /// The order that results should appear in the list according to /// their created_at timestamp. /// - public ListOrder? Order { get; init; } + public ListOrder? Order { get; set; } /// /// The number of values to return in a page result. /// - public int? PageSize { get; init; } + public int? PageSize { get; set; } /// /// The id of the item preceeding the first item in the collection. /// - public string AfterId { get; init; } + public string AfterId { get; set; } /// /// The id of the item following the last item in the collection. /// - public string BeforeId { get; init; } + public string BeforeId { get; set; } } diff --git a/src/Custom/Assistants/RunCreationOptions.cs b/src/Custom/Assistants/RunCreationOptions.cs index 32797f135..bcc45ee2f 100644 --- a/src/Custom/Assistants/RunCreationOptions.cs +++ b/src/Custom/Assistants/RunCreationOptions.cs @@ -22,21 +22,21 @@ public partial class RunCreationOptions /// [CodeGenMember("ResponseFormat")] - public AssistantResponseFormat ResponseFormat { get; init; } + public AssistantResponseFormat ResponseFormat { get; set; } /// /// A run-specific model name that will override the assistant's defined model. If not provided, the assistant's /// selection will be used. /// [CodeGenMember("Model")] - public string ModelOverride { get; init; } + public string ModelOverride { get; set; } /// /// A run specific replacement for the assistant's default instructions that will override the assistant-level /// instructions. If not specified, the assistant's instructions will be used. /// [CodeGenMember("Instructions")] - public string InstructionsOverride { get; init; } + public string InstructionsOverride { get; set; } /// /// Run-specific additional instructions that will be appended to the assistant-level instructions solely for this @@ -44,7 +44,7 @@ public partial class RunCreationOptions /// instructions are concatenated. /// [CodeGenMember("AdditionalInstructions")] - public string AdditionalInstructions { get; init; } + public string AdditionalInstructions { get; set; } /// Adds additional messages to the thread before creating the run. public IList AdditionalMessages { get; } = new ChangeTrackingList(); @@ -73,7 +73,7 @@ private set /// Assumed true if not otherwise specified. /// [CodeGenMember("ParallelToolCalls")] - public bool? ParallelToolCallsEnabled { get; init; } + public bool? ParallelToolCallsEnabled { get; set; } /// /// A run-specific collection of tool definitions that will override the assistant-level defaults. If not provided, @@ -102,7 +102,7 @@ private set public IDictionary Metadata { get; } = new ChangeTrackingDictionary(); /// What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. - public float? Temperature { get; init; } + public float? Temperature { get; set; } /// /// An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. @@ -110,22 +110,22 @@ private set /// We generally recommend altering this or temperature but not both. /// [CodeGenMember("TopP")] - public float? NucleusSamplingFactor { get; init; } + public float? NucleusSamplingFactor { get; set; } /// The maximum number of prompt tokens that may be used over the course of the run. The run will make a best effort to use only the number of prompt tokens specified, across multiple turns of the run. If the run exceeds the number of prompt tokens specified, the run will end with status `incomplete`. See `incomplete_details` for more info. - public int? MaxPromptTokens { get; init; } + public int? MaxPromptTokens { get; set; } /// The maximum number of completion tokens that may be used over the course of the run. The run will make a best effort to use only the number of completion tokens specified, across multiple turns of the run. If the run exceeds the number of completion tokens specified, the run will end with status `incomplete`. See `incomplete_details` for more info. - public int? MaxCompletionTokens { get; init; } + public int? MaxCompletionTokens { get; set; } /// Gets or sets the truncation strategy. - public RunTruncationStrategy TruncationStrategy { get; init; } + public RunTruncationStrategy TruncationStrategy { get; set; } /// /// /// [CodeGenMember("ToolChoice")] - public ToolConstraint ToolConstraint { get; init; } + public ToolConstraint ToolConstraint { get; set; } /// /// Creates a new instance of . diff --git a/src/Custom/Assistants/RunStepCollectionOptions.cs b/src/Custom/Assistants/RunStepCollectionOptions.cs index 19ad62937..d85097058 100644 --- a/src/Custom/Assistants/RunStepCollectionOptions.cs +++ b/src/Custom/Assistants/RunStepCollectionOptions.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Assistants; +namespace OpenAI.Assistants; /// /// Represents addition options available when requesting a collection of instances. @@ -14,20 +14,20 @@ public RunStepCollectionOptions() { } /// The order that results should appear in the list according to /// their created_at timestamp. /// - public ListOrder? Order { get; init; } + public ListOrder? Order { get; set; } /// /// The number of values to return in a page result. /// - public int? PageSize { get; init; } + public int? PageSize { get; set; } /// /// The id of the item preceeding the first item in the collection. /// - public string AfterId { get; init; } + public string AfterId { get; set; } /// /// The id of the item following the last item in the collection. /// - public string BeforeId { get; init; } + public string BeforeId { get; set; } } diff --git a/src/Custom/Assistants/RunStepToolCall.cs b/src/Custom/Assistants/RunStepToolCall.cs index 869e5b4b5..3cb729b12 100644 --- a/src/Custom/Assistants/RunStepToolCall.cs +++ b/src/Custom/Assistants/RunStepToolCall.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; namespace OpenAI.Assistants; @@ -5,7 +6,14 @@ namespace OpenAI.Assistants; [CodeGenModel("RunStepDetailsToolCallsObjectToolCallsObject")] public partial class RunStepToolCall { - public string ToolCallId => AsCodeInterpreter?.Id ?? AsFunction?.Id ?? AsFileSearch?.Id; + public string ToolCallId + => AsCodeInterpreter?.Id + ?? AsFunction?.Id + ?? AsFileSearch?.Id + ?? (SerializedAdditionalRawData?.TryGetValue("id", out BinaryData idData) == true + ? idData.ToString() + : null); + public string CodeInterpreterInput => AsCodeInterpreter?.Input; public IReadOnlyList CodeInterpreterOutputs => AsCodeInterpreter?.Outputs ?? []; diff --git a/src/To.Be.Generated/RunStepsPageEnumerator.cs b/src/Custom/Assistants/RunStepsPageEnumerator.cs similarity index 99% rename from src/To.Be.Generated/RunStepsPageEnumerator.cs rename to src/Custom/Assistants/RunStepsPageEnumerator.cs index 77660e761..d6d74d7d2 100644 --- a/src/To.Be.Generated/RunStepsPageEnumerator.cs +++ b/src/Custom/Assistants/RunStepsPageEnumerator.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Text.Json; diff --git a/src/To.Be.Generated/RunStepsPageToken.cs b/src/Custom/Assistants/RunStepsPageToken.cs similarity index 99% rename from src/To.Be.Generated/RunStepsPageToken.cs rename to src/Custom/Assistants/RunStepsPageToken.cs index 65f522815..2579e7442 100644 --- a/src/To.Be.Generated/RunStepsPageToken.cs +++ b/src/Custom/Assistants/RunStepsPageToken.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.Diagnostics; using System.IO; diff --git a/src/Custom/Assistants/RunTruncationStrategy.cs b/src/Custom/Assistants/RunTruncationStrategy.cs index d2bdea5ff..324723a0c 100644 --- a/src/Custom/Assistants/RunTruncationStrategy.cs +++ b/src/Custom/Assistants/RunTruncationStrategy.cs @@ -38,7 +38,7 @@ public partial class RunTruncationStrategy /// /// /// - private IDictionary _serializedAdditionalRawData; + private IDictionary SerializedAdditionalRawData; /// The truncation strategy to use for the thread. The default is `auto`. If set to `last_messages`, the thread will be truncated to the n most recent messages in the thread. When set to `auto`, messages in the middle of the thread will be dropped to fit the context length of the model, `max_prompt_tokens`. [CodeGenMember("Type")] diff --git a/src/To.Be.Generated/RunsPageEnumerator.cs b/src/Custom/Assistants/RunsPageEnumerator.cs similarity index 99% rename from src/To.Be.Generated/RunsPageEnumerator.cs rename to src/Custom/Assistants/RunsPageEnumerator.cs index 3f9ee113f..3a0b827d0 100644 --- a/src/To.Be.Generated/RunsPageEnumerator.cs +++ b/src/Custom/Assistants/RunsPageEnumerator.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Text.Json; diff --git a/src/To.Be.Generated/RunsPageToken.cs b/src/Custom/Assistants/RunsPageToken.cs similarity index 99% rename from src/To.Be.Generated/RunsPageToken.cs rename to src/Custom/Assistants/RunsPageToken.cs index e019fe5d4..28b27f475 100644 --- a/src/To.Be.Generated/RunsPageToken.cs +++ b/src/Custom/Assistants/RunsPageToken.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.Diagnostics; using System.IO; diff --git a/src/Custom/Assistants/Streaming/AsyncStreamingUpdateCollection.cs b/src/Custom/Assistants/Streaming/AsyncStreamingUpdateCollection.cs index 187163a09..1a44545a5 100644 --- a/src/Custom/Assistants/Streaming/AsyncStreamingUpdateCollection.cs +++ b/src/Custom/Assistants/Streaming/AsyncStreamingUpdateCollection.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; diff --git a/src/Custom/Assistants/Streaming/RequiredActionUpdate.cs b/src/Custom/Assistants/Streaming/RequiredActionUpdate.cs index cd6db5a98..c301be981 100644 --- a/src/Custom/Assistants/Streaming/RequiredActionUpdate.cs +++ b/src/Custom/Assistants/Streaming/RequiredActionUpdate.cs @@ -11,27 +11,14 @@ namespace OpenAI.Assistants; /// Distinct instances will generated for each required action, meaning that /// parallel function calling will present multiple updates even if the tool calls arrive at the same time. /// -public class RequiredActionUpdate : StreamingUpdate +public class RequiredActionUpdate : RunUpdate { - /// - public string FunctionName => AsFunctionCall?.FunctionName; + public IReadOnlyList RequiredActions { get; } - /// - public string FunctionArguments => AsFunctionCall?.FunctionArguments; - - /// - public string ToolCallId => AsFunctionCall?.Id; - - private InternalRequiredFunctionToolCall AsFunctionCall => _requiredAction as InternalRequiredFunctionToolCall; - - private readonly ThreadRun _run; - private readonly RequiredAction _requiredAction; - - internal RequiredActionUpdate(ThreadRun run, RequiredAction action) - : base(StreamingUpdateReason.RunRequiresAction) + internal RequiredActionUpdate(ThreadRun run, IReadOnlyList actions) + : base(run, StreamingUpdateReason.RunRequiresAction) { - _run = run; - _requiredAction = action; + RequiredActions = actions; } /// @@ -39,16 +26,11 @@ internal RequiredActionUpdate(ThreadRun run, RequiredAction action) /// update. /// /// - public ThreadRun GetThreadRun() => _run; + public ThreadRun GetThreadRun() => Value; internal static IEnumerable DeserializeRequiredActionUpdates(JsonElement element) { ThreadRun run = ThreadRun.DeserializeThreadRun(element); - List updates = []; - foreach (RequiredAction action in run.RequiredActions ?? []) - { - updates.Add(new(run, action)); - } - return updates; + return [new(run, run.RequiredActions)]; } } \ No newline at end of file diff --git a/src/Custom/Assistants/Streaming/RunStepDetailsUpdate.cs b/src/Custom/Assistants/Streaming/RunStepDetailsUpdate.cs index 5cda68a85..588d3fd7b 100644 --- a/src/Custom/Assistants/Streaming/RunStepDetailsUpdate.cs +++ b/src/Custom/Assistants/Streaming/RunStepDetailsUpdate.cs @@ -1,3 +1,4 @@ +using System; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; @@ -9,7 +10,8 @@ namespace OpenAI.Assistants; /// public class RunStepDetailsUpdate : StreamingUpdate { - private readonly InternalRunStepDelta _delta; + internal readonly InternalRunStepDelta _delta; + internal readonly InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject _toolCall; private readonly InternalRunStepDeltaStepDetailsMessageCreationObject _asMessageCreation; private readonly InternalRunStepDeltaStepDetailsToolCallsCodeObject _asCodeCall; private readonly InternalRunStepDeltaStepDetailsToolCallsFileSearchObject _asFileSearchCall; @@ -22,7 +24,13 @@ public class RunStepDetailsUpdate : StreamingUpdate public string CreatedMessageId => _asMessageCreation?.MessageCreation?.MessageId; /// - public string ToolCallId => _asCodeCall?.Id ?? _asFileSearchCall?.Id ?? _asFunctionCall?.Id; + public string ToolCallId + => _asCodeCall?.Id + ?? _asFileSearchCall?.Id + ?? _asFunctionCall?.Id + ?? (_toolCall?.SerializedAdditionalRawData?.TryGetValue("id", out BinaryData idData) == true + ? idData.ToString() + : null); /// public int? ToolCallIndex => _asCodeCall?.Index ?? _asFileSearchCall?.Index ?? _asFunctionCall?.Index; @@ -53,6 +61,7 @@ internal RunStepDetailsUpdate( _asFileSearchCall = toolCall as InternalRunStepDeltaStepDetailsToolCallsFileSearchObject; _asFunctionCall = toolCall as InternalRunStepDeltaStepDetailsToolCallsFunctionObject; _delta = stepDelta; + _toolCall = toolCall; } internal static IEnumerable DeserializeRunStepDetailsUpdates( diff --git a/src/Custom/Assistants/Streaming/StreamingUpdateCollection.cs b/src/Custom/Assistants/Streaming/StreamingUpdateCollection.cs index 954bc2284..5a098669b 100644 --- a/src/Custom/Assistants/Streaming/StreamingUpdateCollection.cs +++ b/src/Custom/Assistants/Streaming/StreamingUpdateCollection.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Collections; @@ -62,7 +62,7 @@ public StreamingUpdateEnumerator(Func getResult, StreamingUpdate IEnumerator.Current => _current!; - object IEnumerator.Current => throw new NotImplementedException(); + object IEnumerator.Current => _current!; public bool MoveNext() { diff --git a/src/Custom/Assistants/Streaming/StreamingUpdateReason.Serialization.cs b/src/Custom/Assistants/Streaming/StreamingUpdateReason.Serialization.cs index 87f1f6642..6445528ad 100644 --- a/src/Custom/Assistants/Streaming/StreamingUpdateReason.Serialization.cs +++ b/src/Custom/Assistants/Streaming/StreamingUpdateReason.Serialization.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Assistants; +namespace OpenAI.Assistants; internal static class StreamingUpdateReasonExtensions { diff --git a/src/Custom/Assistants/Streaming/StreamingUpdateReason.cs b/src/Custom/Assistants/Streaming/StreamingUpdateReason.cs index e581c709d..e23673342 100644 --- a/src/Custom/Assistants/Streaming/StreamingUpdateReason.cs +++ b/src/Custom/Assistants/Streaming/StreamingUpdateReason.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Assistants; +namespace OpenAI.Assistants; /// /// The collection of values associated with the event names of streaming update payloads. These correspond to the diff --git a/src/Custom/Assistants/Streaming/TextAnnotationUpdate.cs b/src/Custom/Assistants/Streaming/TextAnnotationUpdate.cs index f36c388eb..e8972d138 100644 --- a/src/Custom/Assistants/Streaming/TextAnnotationUpdate.cs +++ b/src/Custom/Assistants/Streaming/TextAnnotationUpdate.cs @@ -1,42 +1,66 @@ -namespace OpenAI.Assistants; +using System; + +namespace OpenAI.Assistants; public class TextAnnotationUpdate { /// /// The index of the content item that this annotation applies to. /// - public int ContentIndex => _fileSearchCitation?.Index ?? _codeCitation?.Index ?? -1; + public int ContentIndex + => _fileSearchCitation?.Index + ?? _codeCitation?.Index + ?? (_internalAnnotation?.SerializedAdditionalRawData.TryGetValue("index", out BinaryData indexData) == true + ? int.Parse(indexData.ToString()) + : -1); /// - /// The ID of the file cited by the file_search tool for this annotation. + /// The index in the message content at which the citation begins. /// - public string InputFileId => _fileSearchCitation?.FileCitation?.FileId; + public int? StartIndex + => _fileSearchCitation?.StartIndex + ?? _codeCitation?.StartIndex + ?? (_internalAnnotation?.SerializedAdditionalRawData.TryGetValue("start_index", out BinaryData indexData) == true + ? int.Parse(indexData.ToString()) + : null); /// - /// The ID of the file that was generated by the code_interpreter tool for this citation. + /// The index in the message content at which the citation ends. /// - public string OutputFileId => _codeCitation?.FilePath?.FileId; + public int? EndIndex + => _fileSearchCitation?.EndIndex + ?? _codeCitation?.EndIndex + ?? (_internalAnnotation?.SerializedAdditionalRawData.TryGetValue("start_index", out BinaryData indexData) == true + ? int.Parse(indexData.ToString()) + : null); /// - /// The index in the message content at which the citation begins. + /// The text in the message content that should be replaced. /// - public int? StartIndex => _fileSearchCitation?.StartIndex ?? _codeCitation?.StartIndex; + public string TextToReplace + => _fileSearchCitation?.Text + ?? _codeCitation?.Text + ?? (_internalAnnotation?.SerializedAdditionalRawData.TryGetValue("text", out BinaryData textData) == true + ? textData.ToString() + : null); /// - /// The index in the message content at which the citation ends. + /// The ID of the file cited by the file_search tool for this annotation. /// - public int? EndIndex => _fileSearchCitation?.EndIndex ?? _codeCitation?.EndIndex; + public string InputFileId => _fileSearchCitation?.FileCitation?.FileId; /// - /// The text in the message content that should be replaced. + /// The ID of the file that was generated by the code_interpreter tool for this citation. /// - public string TextToReplace => _fileSearchCitation?.Text ?? _codeCitation?.Text; + public string OutputFileId => _codeCitation?.FilePath?.FileId; + internal readonly MessageDeltaTextContentAnnotation _internalAnnotation; private readonly MessageDeltaContentTextAnnotationsFileCitationObject _fileSearchCitation; private readonly MessageDeltaContentTextAnnotationsFilePathObject _codeCitation; internal TextAnnotationUpdate(MessageDeltaTextContentAnnotation internalAnnotation) { + _internalAnnotation = internalAnnotation; _fileSearchCitation = internalAnnotation as MessageDeltaContentTextAnnotationsFileCitationObject; _codeCitation = internalAnnotation as MessageDeltaContentTextAnnotationsFilePathObject; } diff --git a/src/Custom/Assistants/TextAnnotation.cs b/src/Custom/Assistants/TextAnnotation.cs index 4a63f5d49..45c505e38 100644 --- a/src/Custom/Assistants/TextAnnotation.cs +++ b/src/Custom/Assistants/TextAnnotation.cs @@ -1,37 +1,56 @@ -namespace OpenAI.Assistants; +using System; + +namespace OpenAI.Assistants; public class TextAnnotation { + internal readonly MessageContentTextObjectAnnotation _internalAnnotation; private readonly MessageContentTextAnnotationsFileCitationObject _fileSearchCitation; private readonly MessageContentTextAnnotationsFilePathObject _codeCitation; /// - /// The ID of the file cited by the file_search tool for this annotation. + /// The index in the message content at which the citation begins. /// - public string InputFileId => _fileSearchCitation?.FileCitation?.FileId; + public int StartIndex + => _fileSearchCitation?.StartIndex + ?? _codeCitation?.StartIndex + ?? (_internalAnnotation?.SerializedAdditionalRawData?.TryGetValue("start_index", out BinaryData indexData) == true + ? int.Parse(indexData.ToString()) + : -1); /// - /// The ID of the file that was generated by the code_interpreter tool for this citation. + /// The index in the message content at which the citation ends. /// - public string OutputFileId => _codeCitation?.FilePath?.FileId; + public int EndIndex => + _fileSearchCitation?.EndIndex + ?? _codeCitation?.EndIndex + ?? (_internalAnnotation?.SerializedAdditionalRawData?.TryGetValue("end_index", out BinaryData indexData) == true + ? int.Parse(indexData.ToString()) + : -1); /// - /// The index in the message content at which the citation begins. + /// The text in the message content that should be replaced. /// - public int StartIndex => _fileSearchCitation?.StartIndex ?? _codeCitation?.StartIndex ?? -1; + public string TextToReplace => + _fileSearchCitation?.Text + ?? _codeCitation?.Text + ?? (_internalAnnotation?.SerializedAdditionalRawData?.TryGetValue("text", out BinaryData textData) == true + ? textData.ToString() + : null); /// - /// The index in the message content at which the citation ends. + /// The ID of the file cited by the file_search tool for this annotation. /// - public int EndIndex => _fileSearchCitation?.EndIndex ?? _codeCitation?.EndIndex ?? -1; + public string InputFileId => _fileSearchCitation?.FileCitation?.FileId; /// - /// The text in the message content that should be replaced. + /// The ID of the file that was generated by the code_interpreter tool for this citation. /// - public string TextToReplace => _fileSearchCitation?.Text ?? _codeCitation?.Text; + public string OutputFileId => _codeCitation?.FilePath?.FileId; internal TextAnnotation(MessageContentTextObjectAnnotation internalAnnotation) { + _internalAnnotation = internalAnnotation; _fileSearchCitation = internalAnnotation as MessageContentTextAnnotationsFileCitationObject; _codeCitation = internalAnnotation as MessageContentTextAnnotationsFilePathObject; ; } diff --git a/src/Custom/Assistants/ThreadCreationOptions.cs b/src/Custom/Assistants/ThreadCreationOptions.cs index 92f5fcd44..f0ae040f7 100644 --- a/src/Custom/Assistants/ThreadCreationOptions.cs +++ b/src/Custom/Assistants/ThreadCreationOptions.cs @@ -13,7 +13,7 @@ public partial class ThreadCreationOptions /// [CodeGenMember("ToolResources")] - public ToolResources ToolResources { get; init; } + public ToolResources ToolResources { get; set; } // CUSTOM: the wire-oriented messages type list is hidden so that we can propagate top-level required semantics // of message creation into the collection. diff --git a/src/Custom/Assistants/ThreadModificationOptions.cs b/src/Custom/Assistants/ThreadModificationOptions.cs index 8f81012cd..5216abe20 100644 --- a/src/Custom/Assistants/ThreadModificationOptions.cs +++ b/src/Custom/Assistants/ThreadModificationOptions.cs @@ -11,5 +11,5 @@ public partial class ThreadModificationOptions /// [CodeGenMember("ToolResources")] - public ToolResources ToolResources { get; init; } + public ToolResources ToolResources { get; set; } } \ No newline at end of file diff --git a/src/Custom/Assistants/ThreadRun.cs b/src/Custom/Assistants/ThreadRun.cs index 9d8ac1402..b2a0f3f43 100644 --- a/src/Custom/Assistants/ThreadRun.cs +++ b/src/Custom/Assistants/ThreadRun.cs @@ -91,6 +91,6 @@ internal ThreadRun(string id, DateTimeOffset createdAt, string threadId, string /// Assumed true if not otherwise specified. /// [CodeGenMember("ParallelToolCalls")] - public bool? ParallelToolCallsEnabled { get; init; } + public bool? ParallelToolCallsEnabled { get; } } diff --git a/src/Custom/Assistants/ToolConstraint.Serialization.cs b/src/Custom/Assistants/ToolConstraint.Serialization.cs index 174906626..7d2a335e4 100644 --- a/src/Custom/Assistants/ToolConstraint.Serialization.cs +++ b/src/Custom/Assistants/ToolConstraint.Serialization.cs @@ -42,7 +42,7 @@ internal static void SerializeToolConstraint(ToolConstraint instance, Utf8JsonWr writer.WriteStringValue(instance._objectFunctionName); writer.WriteEndObject(); } - writer.WriteSerializedAdditionalRawData(instance._serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(instance.SerializedAdditionalRawData, options); writer.WriteEndObject(); } } diff --git a/src/Custom/Assistants/ToolConstraint.cs b/src/Custom/Assistants/ToolConstraint.cs index c866a2e03..dc3de61ac 100644 --- a/src/Custom/Assistants/ToolConstraint.cs +++ b/src/Custom/Assistants/ToolConstraint.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; namespace OpenAI.Assistants; @@ -10,7 +10,7 @@ public partial class ToolConstraint [CodeGenMember("Type")] private readonly string _objectType; private readonly string _objectFunctionName; - private readonly IDictionary _serializedAdditionalRawData; + private readonly IDictionary SerializedAdditionalRawData; // CUSTOM: Made internal. /// Gets or sets the function. @@ -38,7 +38,7 @@ public ToolConstraint(ToolDefinition toolDefinition) default: throw new ArgumentOutOfRangeException(nameof(toolDefinition)); } - _serializedAdditionalRawData = new ChangeTrackingDictionary(); + SerializedAdditionalRawData = new ChangeTrackingDictionary(); } internal ToolConstraint(string plainTextValue) @@ -50,6 +50,6 @@ internal ToolConstraint(string plainTextValue, string objectType, string objectF _plainTextValue = plainTextValue; _objectType = objectType; _objectFunctionName = objectFunctionName; - _serializedAdditionalRawData = serializedAdditionalRawData ?? new ChangeTrackingDictionary(); + SerializedAdditionalRawData = serializedAdditionalRawData ?? new ChangeTrackingDictionary(); } } diff --git a/src/Custom/Assistants/ToolDefinition.cs b/src/Custom/Assistants/ToolDefinition.cs index ddedfdf18..92528d30b 100644 --- a/src/Custom/Assistants/ToolDefinition.cs +++ b/src/Custom/Assistants/ToolDefinition.cs @@ -1,4 +1,4 @@ -using System; +using System; namespace OpenAI.Assistants; diff --git a/src/Custom/Assistants/ToolOutput.cs b/src/Custom/Assistants/ToolOutput.cs index 15db2fec7..ad32112d0 100644 --- a/src/Custom/Assistants/ToolOutput.cs +++ b/src/Custom/Assistants/ToolOutput.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Assistants; +namespace OpenAI.Assistants; [CodeGenModel("SubmitToolOutputsRunRequestToolOutput")] public partial class ToolOutput diff --git a/src/Custom/Assistants/ToolResources.cs b/src/Custom/Assistants/ToolResources.cs index 93b2b7388..1043eead2 100644 --- a/src/Custom/Assistants/ToolResources.cs +++ b/src/Custom/Assistants/ToolResources.cs @@ -8,9 +8,9 @@ namespace OpenAI.Assistants; public partial class ToolResources { /// Gets the code interpreter. - public CodeInterpreterToolResources CodeInterpreter { get; init; } + public CodeInterpreterToolResources CodeInterpreter { get; set; } /// Gets the file search. - public FileSearchToolResources FileSearch { get; init; } + public FileSearchToolResources FileSearch { get; set; } public ToolResources() {} diff --git a/src/Custom/Audio/AudioClient.Protocol.cs b/src/Custom/Audio/AudioClient.Protocol.cs index 223e83c93..ba0001627 100644 --- a/src/Custom/Audio/AudioClient.Protocol.cs +++ b/src/Custom/Audio/AudioClient.Protocol.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.ComponentModel; diff --git a/src/Custom/Audio/AudioTranscriptionOptions.cs b/src/Custom/Audio/AudioTranscriptionOptions.cs index e111213de..b13679e0c 100644 --- a/src/Custom/Audio/AudioTranscriptionOptions.cs +++ b/src/Custom/Audio/AudioTranscriptionOptions.cs @@ -83,7 +83,7 @@ public AudioTranscriptionOptions() /// /// The timestamp granularities to populate for this transcription. /// - public AudioTimestampGranularities Granularities { get; init; } + public AudioTimestampGranularities Granularities { get; set; } internal MultipartFormDataBinaryContent ToMultipartContent(Stream audio, string audioFilename) { diff --git a/src/Custom/Audio/AudioTranslationFormat.cs b/src/Custom/Audio/AudioTranslationFormat.cs index 29e60faa2..84fd6686a 100644 --- a/src/Custom/Audio/AudioTranslationFormat.cs +++ b/src/Custom/Audio/AudioTranslationFormat.cs @@ -1,4 +1,4 @@ -using System.ComponentModel; +using System.ComponentModel; namespace OpenAI.Audio; diff --git a/src/Custom/Audio/Internal/GeneratorStubs.cs b/src/Custom/Audio/Internal/GeneratorStubs.cs index 9f0082d56..22859b0d0 100644 --- a/src/Custom/Audio/Internal/GeneratorStubs.cs +++ b/src/Custom/Audio/Internal/GeneratorStubs.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Audio; +namespace OpenAI.Audio; // CUSTOM: Made internal. diff --git a/src/Custom/Audio/TranscribedSegment.cs b/src/Custom/Audio/TranscribedSegment.cs index f361c7999..20f23300a 100644 --- a/src/Custom/Audio/TranscribedSegment.cs +++ b/src/Custom/Audio/TranscribedSegment.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Runtime.InteropServices; @@ -7,6 +8,9 @@ namespace OpenAI.Audio; [StructLayout(LayoutKind.Auto)] public readonly partial struct TranscribedSegment { + // CUSTOM: Remove setter. + internal IDictionary SerializedAdditionalRawData { get; } + // CUSTOM: Rename. [CodeGenMember("Seek")] public long SeekOffset { get; } diff --git a/src/Custom/Audio/TranscribedWord.cs b/src/Custom/Audio/TranscribedWord.cs index 1155ba1c4..f3a534b67 100644 --- a/src/Custom/Audio/TranscribedWord.cs +++ b/src/Custom/Audio/TranscribedWord.cs @@ -1,6 +1,13 @@ -namespace OpenAI.Audio; +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +namespace OpenAI.Audio; [CodeGenModel("TranscriptionWord")] +[StructLayout(LayoutKind.Auto)] public readonly partial struct TranscribedWord { + // CUSTOM: Remove setter. + internal IDictionary SerializedAdditionalRawData { get; } } \ No newline at end of file diff --git a/src/Custom/Batch/BatchClient.Protocol.cs b/src/Custom/Batch/BatchClient.Protocol.cs index 11cc1097c..321502ee7 100644 --- a/src/Custom/Batch/BatchClient.Protocol.cs +++ b/src/Custom/Batch/BatchClient.Protocol.cs @@ -1,42 +1,58 @@ using System; using System.ClientModel; using System.ClientModel.Primitives; +using System.Text.Json; using System.Threading.Tasks; namespace OpenAI.Batch; public partial class BatchClient { - /// - /// [Protocol Method] Creates and executes a batch from an uploaded file of requests - /// - /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual async Task CreateBatchAsync(BinaryContent content, RequestOptions options = null) + public virtual async Task CreateBatchAsync( + ReturnWhen returnWhen, + BinaryContent content, RequestOptions options = null) { Argument.AssertNotNull(content, nameof(content)); using PipelineMessage message = CreateCreateBatchRequest(content, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + + PipelineResponse response = await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false); + + using JsonDocument doc = JsonDocument.Parse(response.Content); + string batchId = doc.RootElement.GetProperty("id"u8).GetString(); + string status = doc.RootElement.GetProperty("status"u8).GetString(); + + BatchOperation operation = new BatchOperation(_pipeline, _endpoint, batchId, status, response); + if (returnWhen == ReturnWhen.Started) + { + return operation; + } + + await operation.WaitForCompletionAsync(options?.CancellationToken ?? default).ConfigureAwait(false); + return operation; } - /// - /// [Protocol Method] Creates and executes a batch from an uploaded file of requests - /// - /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual ClientResult CreateBatch(BinaryContent content, RequestOptions options = null) + public virtual BatchOperation CreateBatch( + ReturnWhen returnWhen, + BinaryContent content, RequestOptions options = null) { Argument.AssertNotNull(content, nameof(content)); using PipelineMessage message = CreateCreateBatchRequest(content, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + PipelineResponse response = _pipeline.ProcessMessage(message, options); + + using JsonDocument doc = JsonDocument.Parse(response.Content); + string batchId = doc.RootElement.GetProperty("id"u8).GetString(); + string status = doc.RootElement.GetProperty("status"u8).GetString(); + + BatchOperation operation = new BatchOperation(_pipeline, _endpoint, batchId, status, response); + if (returnWhen == ReturnWhen.Started) + { + return operation; + } + + operation.WaitForCompletion(options?.CancellationToken ?? default); + return operation; } /// @@ -100,38 +116,4 @@ public virtual ClientResult GetBatch(string batchId, RequestOptions options) using PipelineMessage message = CreateRetrieveBatchRequest(batchId, options); return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); } - - /// - /// [Protocol Method] Cancels an in-progress batch. - /// - /// The ID of the batch to cancel. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual async Task CancelBatchAsync(string batchId, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); - - using PipelineMessage message = CreateCancelBatchRequest(batchId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - - /// - /// [Protocol Method] Cancels an in-progress batch. - /// - /// The ID of the batch to cancel. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual ClientResult CancelBatch(string batchId, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); - - using PipelineMessage message = CreateCancelBatchRequest(batchId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } } diff --git a/src/Custom/Batch/BatchClient.cs b/src/Custom/Batch/BatchClient.cs index adce1b0d1..a5c75e9a5 100644 --- a/src/Custom/Batch/BatchClient.cs +++ b/src/Custom/Batch/BatchClient.cs @@ -2,7 +2,6 @@ using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; -using System.Threading.Tasks; namespace OpenAI.Batch; diff --git a/src/Custom/Chat/AssistantChatMessage.Serialization.cs b/src/Custom/Chat/AssistantChatMessage.Serialization.cs index 8cc03e442..38d9b4e4c 100644 --- a/src/Custom/Chat/AssistantChatMessage.Serialization.cs +++ b/src/Custom/Chat/AssistantChatMessage.Serialization.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; @@ -58,7 +58,7 @@ protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOption writer.WriteNull("content"); } } - writer.WriteSerializedAdditionalRawData(_serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(SerializedAdditionalRawData, options); writer.WriteEndObject(); } } diff --git a/src/Custom/Chat/AssistantChatMessage.cs b/src/Custom/Chat/AssistantChatMessage.cs index b1374e99b..0549fcd2c 100644 --- a/src/Custom/Chat/AssistantChatMessage.cs +++ b/src/Custom/Chat/AssistantChatMessage.cs @@ -106,5 +106,5 @@ public AssistantChatMessage(ChatCompletion chatCompletion) /// message and is used to differentiate between multiple participants of the same role. /// [CodeGenMember("Name")] - public string ParticipantName { get; init; } + public string ParticipantName { get; set; } } \ No newline at end of file diff --git a/src/Custom/Chat/ChatClient.Protocol.cs b/src/Custom/Chat/ChatClient.Protocol.cs index a649281dc..21a03c811 100644 --- a/src/Custom/Chat/ChatClient.Protocol.cs +++ b/src/Custom/Chat/ChatClient.Protocol.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.ComponentModel; diff --git a/src/Custom/Chat/ChatClient.cs b/src/Custom/Chat/ChatClient.cs index 72b9a5d7d..54c31bedb 100644 --- a/src/Custom/Chat/ChatClient.cs +++ b/src/Custom/Chat/ChatClient.cs @@ -125,7 +125,7 @@ public virtual ClientResult CompleteChat(params ChatMessage[] me /// history. /// /// - /// can be enumerated over using the await foreach pattern using the + /// can be enumerated over using the await foreach pattern using the /// interface. /// /// The messages to provide as input for chat completion. @@ -151,7 +151,7 @@ async Task getResultAsync() => /// history. /// /// - /// can be enumerated over using the await foreach pattern using the + /// can be enumerated over using the await foreach pattern using the /// interface. /// /// The messages to provide as input for chat completion. @@ -164,7 +164,7 @@ public virtual AsyncCollectionResult CompleteChat /// history. /// /// - /// can be enumerated over using the foreach pattern using the + /// can be enumerated over using the foreach pattern using the /// interface. /// /// The messages to provide as input for chat completion. @@ -188,7 +188,7 @@ public virtual CollectionResult CompleteChatStrea /// history. /// /// - /// can be enumerated over using the foreach pattern using the + /// can be enumerated over using the foreach pattern using the /// interface. /// /// The messages to provide as input for chat completion. diff --git a/src/Custom/Chat/ChatCompletionOptions.Serialization.cs b/src/Custom/Chat/ChatCompletionOptions.Serialization.cs index a52c1eaf5..30e23a50b 100644 --- a/src/Custom/Chat/ChatCompletionOptions.Serialization.cs +++ b/src/Custom/Chat/ChatCompletionOptions.Serialization.cs @@ -1,4 +1,4 @@ -using System.ClientModel.Primitives; +using System.ClientModel.Primitives; using System.Collections.Generic; using System.Globalization; using System.Runtime.CompilerServices; diff --git a/src/Custom/Chat/ChatCompletionOptions.cs b/src/Custom/Chat/ChatCompletionOptions.cs index 12f474f17..77ef66507 100644 --- a/src/Custom/Chat/ChatCompletionOptions.cs +++ b/src/Custom/Chat/ChatCompletionOptions.cs @@ -59,12 +59,12 @@ public ChatCompletionOptions() // CUSTOM: Renamed. /// Whether to return log probabilities of the output tokens or not. If true, returns the log probabilities of each output token returned in the message content. [CodeGenMember("Logprobs")] - public bool? IncludeLogProbabilities { get; init; } + public bool? IncludeLogProbabilities { get; set; } // CUSTOM: Renamed. /// An integer between 0 and 20 specifying the number of most likely tokens to return at each token position, each with an associated log probability. must be set to if this property is used. [CodeGenMember("TopLogprobs")] - public int? TopLogProbabilityCount { get; init; } + public int? TopLogProbabilityCount { get; set; } // CUSTOM: // - Renamed. @@ -91,7 +91,7 @@ public ChatCompletionOptions() /// /// [CodeGenMember("ToolChoice")] - public ChatToolChoice ToolChoice { get; init; } + public ChatToolChoice ToolChoice { get; set; } // CUSTOM: // - Renamed. @@ -100,7 +100,7 @@ public ChatCompletionOptions() /// Deprecated in favor of . /// [CodeGenMember("FunctionCall")] - public ChatFunctionChoice FunctionChoice { get; init; } + public ChatFunctionChoice FunctionChoice { get; set; } /// /// Whether to enable parallel function calling during tool use. @@ -109,5 +109,5 @@ public ChatCompletionOptions() /// Assumed true if not otherwise specified. /// [CodeGenMember("ParallelToolCalls")] - public bool? ParallelToolCallsEnabled { get; init; } + public bool? ParallelToolCallsEnabled { get; set; } } \ No newline at end of file diff --git a/src/Custom/Chat/ChatFunction.cs b/src/Custom/Chat/ChatFunction.cs index f23f424e1..d2b14ec49 100644 --- a/src/Custom/Chat/ChatFunction.cs +++ b/src/Custom/Chat/ChatFunction.cs @@ -33,10 +33,10 @@ public ChatFunction(string functionName, string functionDescription = null, Bina // CUSTOM: Renamed /// A description of what the function does, used by the model to choose when and how to call the function. [CodeGenMember("Description")] - public string FunctionDescription { get; init; } + public string FunctionDescription { get; set; } // CUSTOM: Changed type to BinarayData. /// Gets or sets the parameters. [CodeGenMember("Parameters")] - public BinaryData FunctionParameters { get; init; } + public BinaryData FunctionParameters { get; set; } } \ No newline at end of file diff --git a/src/Custom/Chat/ChatFunctionChoice.Serialization.cs b/src/Custom/Chat/ChatFunctionChoice.Serialization.cs index 92bee8a9a..0ad21b27b 100644 --- a/src/Custom/Chat/ChatFunctionChoice.Serialization.cs +++ b/src/Custom/Chat/ChatFunctionChoice.Serialization.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; @@ -22,7 +22,7 @@ internal static void SerializeChatFunctionChoice(ChatFunctionChoice instance, Ut writer.WriteStartObject(); writer.WritePropertyName("name"u8); writer.WriteStringValue(instance._function.Name); - writer.WriteSerializedAdditionalRawData(instance._serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(instance.SerializedAdditionalRawData, options); writer.WriteEndObject(); } } diff --git a/src/Custom/Chat/ChatFunctionChoice.cs b/src/Custom/Chat/ChatFunctionChoice.cs index 276a8cc78..5c9626e4c 100644 --- a/src/Custom/Chat/ChatFunctionChoice.cs +++ b/src/Custom/Chat/ChatFunctionChoice.cs @@ -42,7 +42,7 @@ internal ChatFunctionChoice(string functionName, IDictionary _function = new(functionName); _isPlainString = false; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } // CUSTOM: Added custom public constructor to handle the object representation. diff --git a/src/Custom/Chat/ChatMessage.cs b/src/Custom/Chat/ChatMessage.cs index e523eadd8..99fca4302 100644 --- a/src/Custom/Chat/ChatMessage.cs +++ b/src/Custom/Chat/ChatMessage.cs @@ -58,7 +58,7 @@ public abstract partial class ChatMessage /// /// The content associated with the message. The interpretation of this content will vary depending on the message type. /// - public IList Content { get; protected init; } + public IList Content { get; protected set; } /// public static SystemChatMessage CreateSystemMessage(string content) => new SystemChatMessage(content); diff --git a/src/Custom/Chat/ChatMessageContentPart.Serialization.cs b/src/Custom/Chat/ChatMessageContentPart.Serialization.cs index 0700ed4c0..42e6ad202 100644 --- a/src/Custom/Chat/ChatMessageContentPart.Serialization.cs +++ b/src/Custom/Chat/ChatMessageContentPart.Serialization.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; @@ -29,7 +29,7 @@ internal static void WriteCoreContentPart(ChatMessageContentPart instance, Utf8J writer.WritePropertyName("image_url"u8); writer.WriteObjectValue(instance._imageUrl, options); } - writer.WriteSerializedAdditionalRawData(instance._serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(instance.SerializedAdditionalRawData, options); writer.WriteEndObject(); } diff --git a/src/Custom/Chat/ChatMessageContentPart.cs b/src/Custom/Chat/ChatMessageContentPart.cs index 901c80d25..603008327 100644 --- a/src/Custom/Chat/ChatMessageContentPart.cs +++ b/src/Custom/Chat/ChatMessageContentPart.cs @@ -56,7 +56,7 @@ internal ChatMessageContentPart(string kind, string text, InternalChatCompletion _kind = new ChatMessageContentPartKind(kind); _text = text; _imageUrl = imageUrl; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } /// diff --git a/src/Custom/Chat/ChatMessageRole.cs b/src/Custom/Chat/ChatMessageRole.cs index 21bd9e721..6611ec5d9 100644 --- a/src/Custom/Chat/ChatMessageRole.cs +++ b/src/Custom/Chat/ChatMessageRole.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Chat; +namespace OpenAI.Chat; /// /// Represents the role of a chat completion message. diff --git a/src/Custom/Chat/ChatToolCallKind.cs b/src/Custom/Chat/ChatToolCallKind.cs index 297ba2803..1a0b1716a 100644 --- a/src/Custom/Chat/ChatToolCallKind.cs +++ b/src/Custom/Chat/ChatToolCallKind.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Chat; +namespace OpenAI.Chat; [CodeGenModel("ChatCompletionMessageToolCallType")] public readonly partial struct ChatToolCallKind diff --git a/src/Custom/Chat/ChatToolChoice.Serialization.cs b/src/Custom/Chat/ChatToolChoice.Serialization.cs index 893093809..28ebbf323 100644 --- a/src/Custom/Chat/ChatToolChoice.Serialization.cs +++ b/src/Custom/Chat/ChatToolChoice.Serialization.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; @@ -24,7 +24,7 @@ internal static void SerializeChatToolChoice(ChatToolChoice instance, Utf8JsonWr writer.WriteStringValue(instance._type.ToString()); writer.WritePropertyName("function"u8); writer.WriteObjectValue(instance._function, options); - writer.WriteSerializedAdditionalRawData(instance._serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(instance.SerializedAdditionalRawData, options); writer.WriteEndObject(); } } diff --git a/src/Custom/Chat/ChatToolChoice.cs b/src/Custom/Chat/ChatToolChoice.cs index 4bf4e96fd..0fb3fa258 100644 --- a/src/Custom/Chat/ChatToolChoice.cs +++ b/src/Custom/Chat/ChatToolChoice.cs @@ -61,7 +61,7 @@ internal ChatToolChoice(string functionName, IDictionary ser _type = InternalChatCompletionNamedToolChoiceType.Function; _isPlainString = false; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } /// diff --git a/src/Custom/Chat/ChatToolKind.cs b/src/Custom/Chat/ChatToolKind.cs index 1bd3ca393..3970f0f07 100644 --- a/src/Custom/Chat/ChatToolKind.cs +++ b/src/Custom/Chat/ChatToolKind.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Chat; +namespace OpenAI.Chat; [CodeGenModel("ChatCompletionToolType")] public readonly partial struct ChatToolKind diff --git a/src/Custom/Chat/FunctionChatMessage.Serialization.cs b/src/Custom/Chat/FunctionChatMessage.Serialization.cs index be3f5cd35..cb46e2760 100644 --- a/src/Custom/Chat/FunctionChatMessage.Serialization.cs +++ b/src/Custom/Chat/FunctionChatMessage.Serialization.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; @@ -35,7 +35,7 @@ protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOption writer.WriteNull("content"); } } - writer.WriteSerializedAdditionalRawData(_serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(SerializedAdditionalRawData, options); writer.WriteEndObject(); } diff --git a/src/Custom/Chat/ImageChatMessageContentPartDetail.cs b/src/Custom/Chat/ImageChatMessageContentPartDetail.cs index b8702fd4a..943400a8e 100644 --- a/src/Custom/Chat/ImageChatMessageContentPartDetail.cs +++ b/src/Custom/Chat/ImageChatMessageContentPartDetail.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Chat; +namespace OpenAI.Chat; [CodeGenModel("ChatCompletionRequestMessageContentPartImageImageUrlDetail")] public readonly partial struct ImageChatMessageContentPartDetail diff --git a/src/Custom/Chat/Internal/AsyncStreamingChatCompletionUpdateCollection.cs b/src/Custom/Chat/Internal/AsyncStreamingChatCompletionUpdateCollection.cs index db3781235..d3bc8ae90 100644 --- a/src/Custom/Chat/Internal/AsyncStreamingChatCompletionUpdateCollection.cs +++ b/src/Custom/Chat/Internal/AsyncStreamingChatCompletionUpdateCollection.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; diff --git a/src/Custom/Chat/Internal/GeneratorStubs.cs b/src/Custom/Chat/Internal/GeneratorStubs.cs index 9aecc2712..5288b2600 100644 --- a/src/Custom/Chat/Internal/GeneratorStubs.cs +++ b/src/Custom/Chat/Internal/GeneratorStubs.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Chat; +namespace OpenAI.Chat; [CodeGenModel("ChatCompletionFunctionCallOption")] internal partial class InternalChatCompletionFunctionCallOption { } diff --git a/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs b/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs index 7fe174011..be29738a8 100644 --- a/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs +++ b/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs @@ -69,7 +69,7 @@ internal InternalChatCompletionRequestMessageContentPartImageImageUrl(string url Url = url; Detail = detail; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public Uri ImageUri => _imageUri; diff --git a/src/Custom/Chat/Internal/InternalChatCompletionResponseMessage.Serialization.cs b/src/Custom/Chat/Internal/InternalChatCompletionResponseMessage.Serialization.cs index b178fed10..c8fd80d8e 100644 --- a/src/Custom/Chat/Internal/InternalChatCompletionResponseMessage.Serialization.cs +++ b/src/Custom/Chat/Internal/InternalChatCompletionResponseMessage.Serialization.cs @@ -56,7 +56,7 @@ internal static void SerializeInternalChatCompletionResponseMessage(InternalChat writer.WritePropertyName("function_call"u8); writer.WriteObjectValue(instance.FunctionCall, options); } - writer.WriteSerializedAdditionalRawData(instance._serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(instance.SerializedAdditionalRawData, options); writer.WriteEndObject(); } diff --git a/src/Custom/Chat/Internal/InternalChatCompletionStreamResponseDelta.Serialization.cs b/src/Custom/Chat/Internal/InternalChatCompletionStreamResponseDelta.Serialization.cs index ba50dcd34..0a4fa1ea1 100644 --- a/src/Custom/Chat/Internal/InternalChatCompletionStreamResponseDelta.Serialization.cs +++ b/src/Custom/Chat/Internal/InternalChatCompletionStreamResponseDelta.Serialization.cs @@ -59,7 +59,7 @@ internal static void SerializeInternalChatCompletionStreamResponseDelta(Internal writer.WritePropertyName("role"u8); writer.WriteStringValue(instance.Role.Value.ToSerialString()); } - writer.WriteSerializedAdditionalRawData(instance._serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(instance.SerializedAdditionalRawData, options); writer.WriteEndObject(); } diff --git a/src/Custom/Chat/Internal/InternalCreateChatCompletionStreamResponseChoice.Serialization.cs b/src/Custom/Chat/Internal/InternalCreateChatCompletionStreamResponseChoice.Serialization.cs index 6529d7c84..69b0c4c46 100644 --- a/src/Custom/Chat/Internal/InternalCreateChatCompletionStreamResponseChoice.Serialization.cs +++ b/src/Custom/Chat/Internal/InternalCreateChatCompletionStreamResponseChoice.Serialization.cs @@ -44,7 +44,7 @@ internal static void SerializeInternalCreateChatCompletionStreamResponseChoice(I } writer.WritePropertyName("index"u8); writer.WriteNumberValue(instance.Index); - writer.WriteSerializedAdditionalRawData(instance._serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(instance.SerializedAdditionalRawData, options); writer.WriteEndObject(); } diff --git a/src/Custom/Chat/Internal/StreamingChatCompletionUpdateCollection.cs b/src/Custom/Chat/Internal/StreamingChatCompletionUpdateCollection.cs index 647642c77..bc5d360d7 100644 --- a/src/Custom/Chat/Internal/StreamingChatCompletionUpdateCollection.cs +++ b/src/Custom/Chat/Internal/StreamingChatCompletionUpdateCollection.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Collections; diff --git a/src/Custom/Chat/Internal/UnknownChatMessage.Serialization.cs b/src/Custom/Chat/Internal/UnknownChatMessage.Serialization.cs index 6282e0945..b3eca176b 100644 --- a/src/Custom/Chat/Internal/UnknownChatMessage.Serialization.cs +++ b/src/Custom/Chat/Internal/UnknownChatMessage.Serialization.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; @@ -31,7 +31,7 @@ protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOption } writer.WriteEndArray(); } - writer.WriteSerializedAdditionalRawData(_serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(SerializedAdditionalRawData, options); writer.WriteEndObject(); } diff --git a/src/Custom/Chat/Internal/UnknownChatMessage.cs b/src/Custom/Chat/Internal/UnknownChatMessage.cs index b96c03751..ac4faf00f 100644 --- a/src/Custom/Chat/Internal/UnknownChatMessage.cs +++ b/src/Custom/Chat/Internal/UnknownChatMessage.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Chat; +namespace OpenAI.Chat; [CodeGenModel("UnknownChatCompletionRequestMessage")] internal partial class UnknownChatMessage : ChatMessage diff --git a/src/Custom/Chat/StreamingChatFunctionCallUpdate.cs b/src/Custom/Chat/StreamingChatFunctionCallUpdate.cs index f9bd961db..ad6d8c36f 100644 --- a/src/Custom/Chat/StreamingChatFunctionCallUpdate.cs +++ b/src/Custom/Chat/StreamingChatFunctionCallUpdate.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Chat; +namespace OpenAI.Chat; [CodeGenModel("ChatCompletionStreamResponseDeltaFunctionCall")] public partial class StreamingChatFunctionCallUpdate diff --git a/src/Custom/Chat/SystemChatMessage.Serialization.cs b/src/Custom/Chat/SystemChatMessage.Serialization.cs index 8dd1d3c96..6e98120cb 100644 --- a/src/Custom/Chat/SystemChatMessage.Serialization.cs +++ b/src/Custom/Chat/SystemChatMessage.Serialization.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; @@ -29,7 +29,7 @@ protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOption writer.WritePropertyName("content"u8); writer.WriteStringValue(Content[0].Text); } - writer.WriteSerializedAdditionalRawData(_serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(SerializedAdditionalRawData, options); writer.WriteEndObject(); } } \ No newline at end of file diff --git a/src/Custom/Chat/SystemChatMessage.cs b/src/Custom/Chat/SystemChatMessage.cs index 8d1588781..21de09d3f 100644 --- a/src/Custom/Chat/SystemChatMessage.cs +++ b/src/Custom/Chat/SystemChatMessage.cs @@ -30,5 +30,5 @@ public SystemChatMessage(string content) /// An optional name for the participant. /// [CodeGenMember("Name")] - public string ParticipantName { get; init; } + public string ParticipantName { get; set; } } \ No newline at end of file diff --git a/src/Custom/Chat/ToolChatMessage.Serialization.cs b/src/Custom/Chat/ToolChatMessage.Serialization.cs index fe153d8b0..a32e807f8 100644 --- a/src/Custom/Chat/ToolChatMessage.Serialization.cs +++ b/src/Custom/Chat/ToolChatMessage.Serialization.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; @@ -26,7 +26,7 @@ protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOption writer.WritePropertyName("content"u8); writer.WriteStringValue(Content[0].Text); } - writer.WriteSerializedAdditionalRawData(_serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(SerializedAdditionalRawData, options); writer.WriteEndObject(); } } diff --git a/src/Custom/Chat/UserChatMessage.Serialization.cs b/src/Custom/Chat/UserChatMessage.Serialization.cs index ede30a237..9dd81b1b8 100644 --- a/src/Custom/Chat/UserChatMessage.Serialization.cs +++ b/src/Custom/Chat/UserChatMessage.Serialization.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; @@ -41,7 +41,7 @@ protected override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOption writer.WriteEndArray(); } } - writer.WriteSerializedAdditionalRawData(_serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(SerializedAdditionalRawData, options); writer.WriteEndObject(); } } \ No newline at end of file diff --git a/src/Custom/Chat/UserChatMessage.cs b/src/Custom/Chat/UserChatMessage.cs index 33d1db797..0b2f3ef5d 100644 --- a/src/Custom/Chat/UserChatMessage.cs +++ b/src/Custom/Chat/UserChatMessage.cs @@ -62,5 +62,5 @@ public UserChatMessage(params ChatMessageContentPart[] content) /// An optional name for the participant. /// [CodeGenMember("Name")] - public string ParticipantName { get; init; } + public string ParticipantName { get; set; } } diff --git a/src/Custom/Embeddings/Embedding.cs b/src/Custom/Embeddings/Embedding.cs index 895ce953b..720057e47 100644 --- a/src/Custom/Embeddings/Embedding.cs +++ b/src/Custom/Embeddings/Embedding.cs @@ -77,7 +77,7 @@ internal Embedding(int index, BinaryData embeddingProperty, InternalEmbeddingObj Index = (int)index; EmbeddingProperty = embeddingProperty; Object = @object; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; // Handle additional custom properties. Vector = ConvertToVectorOfFloats(embeddingProperty); diff --git a/src/Custom/Embeddings/EmbeddingClient.Protocol.cs b/src/Custom/Embeddings/EmbeddingClient.Protocol.cs index 1be366fde..94dfb9d6f 100644 --- a/src/Custom/Embeddings/EmbeddingClient.Protocol.cs +++ b/src/Custom/Embeddings/EmbeddingClient.Protocol.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.ComponentModel; diff --git a/src/Custom/Embeddings/EmbeddingCollection.Serialization.cs b/src/Custom/Embeddings/EmbeddingCollection.Serialization.cs index 322325fbf..7bafe4a7b 100644 --- a/src/Custom/Embeddings/EmbeddingCollection.Serialization.cs +++ b/src/Custom/Embeddings/EmbeddingCollection.Serialization.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; @@ -10,7 +10,7 @@ public partial class EmbeddingCollection : IJsonModel { // CUSTOM: // - Serialized the Items property. - // - Recovered the deserialization of _serializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. + // - Recovered the deserialization of SerializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) => CustomSerializationHelpers.SerializeInstance(this, SerializeEmbeddingCollection, writer, options); @@ -30,11 +30,11 @@ internal static void SerializeEmbeddingCollection(EmbeddingCollection instance, writer.WriteStringValue(instance.Object.ToString()); writer.WritePropertyName("usage"u8); writer.WriteObjectValue(instance.Usage, options); - writer.WriteSerializedAdditionalRawData(instance._serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(instance.SerializedAdditionalRawData, options); writer.WriteEndObject(); } - // CUSTOM: Recovered the deserialization of _serializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. + // CUSTOM: Recovered the deserialization of SerializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. internal static EmbeddingCollection DeserializeEmbeddingCollection(JsonElement element, ModelReaderWriterOptions options = null) { options ??= new ModelReaderWriterOptions("W"); diff --git a/src/Custom/Embeddings/EmbeddingCollection.cs b/src/Custom/Embeddings/EmbeddingCollection.cs index 9a19be86a..7fe4ff179 100644 --- a/src/Custom/Embeddings/EmbeddingCollection.cs +++ b/src/Custom/Embeddings/EmbeddingCollection.cs @@ -46,7 +46,7 @@ public partial class EmbeddingCollection : ReadOnlyCollection /// /// /// - private IDictionary _serializedAdditionalRawData; + private IDictionary SerializedAdditionalRawData; // CUSTOM: Set the inherited Items property via the base constructor in favor of the suppressed Data property. /// Initializes a new instance of . @@ -78,7 +78,7 @@ internal EmbeddingCollection(IReadOnlyList data, string model, Intern Model = model; Object = @object; Usage = usage; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } // CUSTOM: Set the inherited Items property via the base constructor in favor of the suppressed Data property. diff --git a/src/Custom/Embeddings/Internal/GeneratorStubs.cs b/src/Custom/Embeddings/Internal/GeneratorStubs.cs index cb14eff92..0b0502e87 100644 --- a/src/Custom/Embeddings/Internal/GeneratorStubs.cs +++ b/src/Custom/Embeddings/Internal/GeneratorStubs.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Embeddings; +namespace OpenAI.Embeddings; // CUSTOM: Made internal. diff --git a/src/Custom/Files/FileClient.Protocol.cs b/src/Custom/Files/FileClient.Protocol.cs index b75bf8bf9..f9784bfec 100644 --- a/src/Custom/Files/FileClient.Protocol.cs +++ b/src/Custom/Files/FileClient.Protocol.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.ComponentModel; diff --git a/src/Custom/Files/FileUploadPurpose.cs b/src/Custom/Files/FileUploadPurpose.cs index 38b85f3c6..2f3e9d8ca 100644 --- a/src/Custom/Files/FileUploadPurpose.cs +++ b/src/Custom/Files/FileUploadPurpose.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Files; +namespace OpenAI.Files; [CodeGenModel("CreateFileRequestPurpose")] public readonly partial struct FileUploadPurpose diff --git a/src/Custom/Files/Internal/GeneratorStubs.cs b/src/Custom/Files/Internal/GeneratorStubs.cs index d83000dda..617be9be4 100644 --- a/src/Custom/Files/Internal/GeneratorStubs.cs +++ b/src/Custom/Files/Internal/GeneratorStubs.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Files; +namespace OpenAI.Files; [CodeGenModel("DeleteFileResponse")] internal partial class InternalDeleteFileResponse { } diff --git a/src/Custom/Files/OpenAIFileInfoCollection.Serialization.cs b/src/Custom/Files/OpenAIFileInfoCollection.Serialization.cs index 1a3f3a0c3..751d8be5a 100644 --- a/src/Custom/Files/OpenAIFileInfoCollection.Serialization.cs +++ b/src/Custom/Files/OpenAIFileInfoCollection.Serialization.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; @@ -10,7 +10,7 @@ public partial class OpenAIFileInfoCollection : IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) => CustomSerializationHelpers.SerializeInstance(this, SerializeOpenAIFileInfoCollection, writer, options); @@ -26,11 +26,11 @@ internal static void SerializeOpenAIFileInfoCollection(OpenAIFileInfoCollection writer.WriteEndArray(); writer.WritePropertyName("object"u8); writer.WriteStringValue(instance.Object.ToString()); - writer.WriteSerializedAdditionalRawData(instance._serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(instance.SerializedAdditionalRawData, options); writer.WriteEndObject(); } - // CUSTOM: Recovered the deserialization of _serializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. + // CUSTOM: Recovered the deserialization of SerializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. internal static OpenAIFileInfoCollection DeserializeOpenAIFileInfoCollection(JsonElement element, ModelReaderWriterOptions options = null) { options ??= ModelSerializationExtensions.WireOptions; diff --git a/src/Custom/Files/OpenAIFileInfoCollection.cs b/src/Custom/Files/OpenAIFileInfoCollection.cs index 7add82853..9406205b1 100644 --- a/src/Custom/Files/OpenAIFileInfoCollection.cs +++ b/src/Custom/Files/OpenAIFileInfoCollection.cs @@ -45,7 +45,7 @@ public partial class OpenAIFileInfoCollection : ReadOnlyCollection /// /// - private IDictionary _serializedAdditionalRawData; + private IDictionary SerializedAdditionalRawData; /// Initializes a new instance of . /// @@ -64,7 +64,7 @@ internal OpenAIFileInfoCollection(IReadOnlyList data, InternalLi : base([.. data]) { Object = @object; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } /// Initializes a new instance of for deserialization. diff --git a/src/Custom/Files/OpenAIFilePurpose.cs b/src/Custom/Files/OpenAIFilePurpose.cs index ac282f07c..2d659b99d 100644 --- a/src/Custom/Files/OpenAIFilePurpose.cs +++ b/src/Custom/Files/OpenAIFilePurpose.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Files; +namespace OpenAI.Files; [CodeGenModel("OpenAIFilePurpose")] public readonly partial struct OpenAIFilePurpose diff --git a/src/Custom/Files/OpenAIFileStatus.cs b/src/Custom/Files/OpenAIFileStatus.cs index 841f9904e..b321e5e09 100644 --- a/src/Custom/Files/OpenAIFileStatus.cs +++ b/src/Custom/Files/OpenAIFileStatus.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Files; +namespace OpenAI.Files; [CodeGenModel("OpenAIFileStatus")] public readonly partial struct OpenAIFileStatus diff --git a/src/Custom/FineTuning/FineTuningClient.Protocol.cs b/src/Custom/FineTuning/FineTuningClient.Protocol.cs index e3919fe1a..5c97e02da 100644 --- a/src/Custom/FineTuning/FineTuningClient.Protocol.cs +++ b/src/Custom/FineTuning/FineTuningClient.Protocol.cs @@ -1,6 +1,7 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; +using System.Text.Json; using System.Threading.Tasks; namespace OpenAI.FineTuning; @@ -34,12 +35,27 @@ public partial class FineTuningClient /// is null. /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task CreateJobAsync(BinaryContent content, RequestOptions options = null) + public virtual async Task CreateJobAsync( + ReturnWhen returnWhen, + BinaryContent content, RequestOptions options = null) { Argument.AssertNotNull(content, nameof(content)); using PipelineMessage message = CreateCreateFineTuningJobRequest(content, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + PipelineResponse response = await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false); + + using JsonDocument doc = JsonDocument.Parse(response.Content); + string jobId = doc.RootElement.GetProperty("id"u8).GetString(); + string status = doc.RootElement.GetProperty("status"u8).GetString(); + + FineTuningOperation operation = new FineTuningOperation(_pipeline, _endpoint, jobId, status, response); + if (returnWhen == ReturnWhen.Started) + { + return operation; + } + + await operation.WaitForCompletionAsync(options?.CancellationToken ?? default).ConfigureAwait(false); + return operation; } // CUSTOM: @@ -57,12 +73,27 @@ public virtual async Task CreateJobAsync(BinaryContent content, Re /// is null. /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult CreateJob(BinaryContent content, RequestOptions options = null) + public virtual FineTuningOperation CreateJob( + ReturnWhen returnWhen, + BinaryContent content, RequestOptions options = null) { Argument.AssertNotNull(content, nameof(content)); using PipelineMessage message = CreateCreateFineTuningJobRequest(content, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + PipelineResponse response = _pipeline.ProcessMessage(message, options); + + using JsonDocument doc = JsonDocument.Parse(response.Content); + string jobId = doc.RootElement.GetProperty("id"u8).GetString(); + string status = doc.RootElement.GetProperty("status"u8).GetString(); + + FineTuningOperation operation = new FineTuningOperation(_pipeline, _endpoint, jobId, status, response); + if (returnWhen == ReturnWhen.Started) + { + return operation; + } + + operation.WaitForCompletion(options?.CancellationToken ?? default); + return operation; } // CUSTOM: @@ -98,170 +129,4 @@ public virtual ClientResult GetJobs(string after, int? limit, RequestOptions opt using PipelineMessage message = CreateGetPaginatedFineTuningJobsRequest(after, limit, options); return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); } - - // CUSTOM: - // - Renamed. - // - Edited doc comment. - /// - /// [Protocol Method] Get info about a fine-tuning job. - /// - /// [Learn more about fine-tuning](/docs/guides/fine-tuning) - /// - /// The ID of the fine-tuning job. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual async Task GetJobAsync(string jobId, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(jobId, nameof(jobId)); - - using PipelineMessage message = CreateRetrieveFineTuningJobRequest(jobId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - - // CUSTOM: - // - Renamed. - // - Edited doc comment. - /// - /// [Protocol Method] Get info about a fine-tuning job. - /// - /// [Learn more about fine-tuning](/docs/guides/fine-tuning) - /// - /// The ID of the fine-tuning job. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual ClientResult GetJob(string jobId, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(jobId, nameof(jobId)); - - using PipelineMessage message = CreateRetrieveFineTuningJobRequest(jobId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - // CUSTOM: - // - Renamed. - // - Edited doc comment. - /// - /// [Protocol Method] Immediately cancel a fine-tune job. - /// - /// The ID of the fine-tuning job to cancel. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual async Task CancelJobAsync(string jobId, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(jobId, nameof(jobId)); - - using PipelineMessage message = CreateCancelFineTuningJobRequest(jobId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - - // CUSTOM: - // - Renamed. - // - Edited doc comment. - /// - /// [Protocol Method] Immediately cancel a fine-tune job. - /// - /// The ID of the fine-tuning job to cancel. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual ClientResult CancelJob(string jobId, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(jobId, nameof(jobId)); - - using PipelineMessage message = CreateCancelFineTuningJobRequest(jobId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - // CUSTOM: - // - Renamed. - // - Edited doc comment. - /// - /// [Protocol Method] Get status updates for a fine-tuning job. - /// - /// The ID of the fine-tuning job to get events for. - /// Identifier for the last event from the previous pagination request. - /// Number of events to retrieve. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual async Task GetJobEventsAsync(string jobId, string after, int? limit, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(jobId, nameof(jobId)); - - using PipelineMessage message = CreateGetFineTuningEventsRequest(jobId, after, limit, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - - // CUSTOM: - // - Renamed. - // - Edited doc comment. - /// - /// [Protocol Method] Get status updates for a fine-tuning job. - /// - /// The ID of the fine-tuning job to get events for. - /// Identifier for the last event from the previous pagination request. - /// Number of events to retrieve. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual ClientResult GetJobEvents(string jobId, string after, int? limit, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(jobId, nameof(jobId)); - - using PipelineMessage message = CreateGetFineTuningEventsRequest(jobId, after, limit, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - /// - /// [Protocol Method] List the checkpoints for a fine-tuning job. - /// - /// The ID of the fine-tuning job to get checkpoints for. - /// Identifier for the last checkpoint ID from the previous pagination request. - /// Number of checkpoints to retrieve. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual async Task GetJobCheckpointsAsync(string fineTuningJobId, string after, int? limit, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(fineTuningJobId, nameof(fineTuningJobId)); - - using PipelineMessage message = CreateGetFineTuningJobCheckpointsRequest(fineTuningJobId, after, limit, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - - /// - /// [Protocol Method] List the checkpoints for a fine-tuning job. - /// - /// The ID of the fine-tuning job to get checkpoints for. - /// Identifier for the last checkpoint ID from the previous pagination request. - /// Number of checkpoints to retrieve. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual ClientResult GetJobCheckpoints(string fineTuningJobId, string after, int? limit, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(fineTuningJobId, nameof(fineTuningJobId)); - - using PipelineMessage message = CreateGetFineTuningJobCheckpointsRequest(fineTuningJobId, after, limit, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } } diff --git a/src/Custom/FineTuning/FineTuningClient.cs b/src/Custom/FineTuning/FineTuningClient.cs index b5e61e9e8..6313c783f 100644 --- a/src/Custom/FineTuning/FineTuningClient.cs +++ b/src/Custom/FineTuning/FineTuningClient.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; diff --git a/src/Custom/FineTuning/Internal/GeneratorStubs.cs b/src/Custom/FineTuning/Internal/GeneratorStubs.cs index f55fd195a..cf7b626a9 100644 --- a/src/Custom/FineTuning/Internal/GeneratorStubs.cs +++ b/src/Custom/FineTuning/Internal/GeneratorStubs.cs @@ -1,4 +1,4 @@ -namespace OpenAI.FineTuning; +namespace OpenAI.FineTuning; // CUSTOM: Made internal. diff --git a/src/Custom/Images/GeneratedImageCollection.Serialization.cs b/src/Custom/Images/GeneratedImageCollection.Serialization.cs index a37e144c3..8dbfc48e8 100644 --- a/src/Custom/Images/GeneratedImageCollection.Serialization.cs +++ b/src/Custom/Images/GeneratedImageCollection.Serialization.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Text.Json; @@ -10,7 +10,7 @@ public partial class GeneratedImageCollection : IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) => CustomSerializationHelpers.SerializeInstance(this, SerializeGeneratedImageCollection, writer, options); @@ -26,11 +26,11 @@ internal static void SerializeGeneratedImageCollection(GeneratedImageCollection writer.WriteObjectValue(item, options); } writer.WriteEndArray(); - writer.WriteSerializedAdditionalRawData(instance._serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(instance.SerializedAdditionalRawData, options); writer.WriteEndObject(); } - // CUSTOM: Recovered the deserialization of _serializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. + // CUSTOM: Recovered the deserialization of SerializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. internal static GeneratedImageCollection DeserializeGeneratedImageCollection(JsonElement element, ModelReaderWriterOptions options = null) { options ??= ModelSerializationExtensions.WireOptions; diff --git a/src/Custom/Images/GeneratedImageCollection.cs b/src/Custom/Images/GeneratedImageCollection.cs index a183a643d..1cd14a3ab 100644 --- a/src/Custom/Images/GeneratedImageCollection.cs +++ b/src/Custom/Images/GeneratedImageCollection.cs @@ -44,7 +44,7 @@ public partial class GeneratedImageCollection : ReadOnlyCollection /// /// - private IDictionary _serializedAdditionalRawData; + private IDictionary SerializedAdditionalRawData; // CUSTOM: Set the inherited Items property via the base constructor in favor of the suppressed Data property. /// Initializes a new instance of . @@ -68,7 +68,7 @@ internal GeneratedImageCollection(DateTimeOffset created, IReadOnlyList The size of the generated images. Must be one of `256x256`, `512x512`, or `1024x1024`. - public GeneratedImageSize? Size { get; init; } + public GeneratedImageSize? Size { get; set; } // CUSTOM: Changed property type. /// The format in which the generated images are returned. Must be one of `url` or `b64_json`. - public GeneratedImageFormat? ResponseFormat { get; init; } + public GeneratedImageFormat? ResponseFormat { get; set; } internal MultipartFormDataBinaryContent ToMultipartContent(Stream image, string imageFilename, Stream mask, string maskFilename) { diff --git a/src/Custom/Images/ImageVariationOptions.cs b/src/Custom/Images/ImageVariationOptions.cs index 1f1acaa36..f36e2ef47 100644 --- a/src/Custom/Images/ImageVariationOptions.cs +++ b/src/Custom/Images/ImageVariationOptions.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; namespace OpenAI.Images; @@ -48,11 +48,11 @@ public ImageVariationOptions() // CUSTOM: Changed property type. /// The size of the generated images. Must be one of `256x256`, `512x512`, or `1024x1024`. - public GeneratedImageSize? Size { get; init; } + public GeneratedImageSize? Size { get; set; } // CUSTOM: Changed property type. /// The format in which the generated images are returned. Must be one of `url` or `b64_json`. - public GeneratedImageFormat? ResponseFormat { get; init; } + public GeneratedImageFormat? ResponseFormat { get; set; } internal MultipartFormDataBinaryContent ToMultipartContent(Stream image, string imageFilename) { diff --git a/src/Custom/Images/Internal/GeneratorStubs.cs b/src/Custom/Images/Internal/GeneratorStubs.cs index 24730c93e..3e85bb899 100644 --- a/src/Custom/Images/Internal/GeneratorStubs.cs +++ b/src/Custom/Images/Internal/GeneratorStubs.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Images; +namespace OpenAI.Images; // CUSTOM: Made internal. diff --git a/src/Custom/LegacyCompletions/Internal/GeneratorStubs.cs b/src/Custom/LegacyCompletions/Internal/GeneratorStubs.cs index a788ca91c..b184f9da0 100644 --- a/src/Custom/LegacyCompletions/Internal/GeneratorStubs.cs +++ b/src/Custom/LegacyCompletions/Internal/GeneratorStubs.cs @@ -1,4 +1,4 @@ -namespace OpenAI.LegacyCompletions; +namespace OpenAI.LegacyCompletions; // CUSTOM: Made internal. diff --git a/src/Custom/Models/Internal/GeneratorStubs.cs b/src/Custom/Models/Internal/GeneratorStubs.cs index 1c9c0bc80..2142aa5c1 100644 --- a/src/Custom/Models/Internal/GeneratorStubs.cs +++ b/src/Custom/Models/Internal/GeneratorStubs.cs @@ -1,4 +1,4 @@ - + namespace OpenAI.Models; [CodeGenModel("DeleteModelResponse")] diff --git a/src/Custom/Models/ModelClient.Protocol.cs b/src/Custom/Models/ModelClient.Protocol.cs index c249da63a..7be879115 100644 --- a/src/Custom/Models/ModelClient.Protocol.cs +++ b/src/Custom/Models/ModelClient.Protocol.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.ComponentModel; diff --git a/src/Custom/Models/OpenAIModelInfoCollection.Serialization.cs b/src/Custom/Models/OpenAIModelInfoCollection.Serialization.cs index 78b54d572..6cfc9383d 100644 --- a/src/Custom/Models/OpenAIModelInfoCollection.Serialization.cs +++ b/src/Custom/Models/OpenAIModelInfoCollection.Serialization.cs @@ -1,4 +1,4 @@ -using OpenAI.Models; +using OpenAI.Models; using System; using System.ClientModel; using System.ClientModel.Primitives; @@ -13,7 +13,7 @@ public partial class OpenAIModelInfoCollection : IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) => CustomSerializationHelpers.SerializeInstance(this, SerializeOpenAIModelInfoCollection, writer, options); @@ -29,11 +29,11 @@ internal static void SerializeOpenAIModelInfoCollection(OpenAIModelInfoCollectio writer.WriteObjectValue(item, options); } writer.WriteEndArray(); - writer.WriteSerializedAdditionalRawData(instance._serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(instance.SerializedAdditionalRawData, options); writer.WriteEndObject(); } - // CUSTOM: Recovered the deserialization of _serializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. + // CUSTOM: Recovered the deserialization of SerializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. internal static OpenAIModelInfoCollection DeserializeOpenAIModelInfoCollection(JsonElement element, ModelReaderWriterOptions options = null) { options ??= ModelSerializationExtensions.WireOptions; diff --git a/src/Custom/Models/OpenAIModelInfoCollection.cs b/src/Custom/Models/OpenAIModelInfoCollection.cs index 7092c9dfb..773bab8f9 100644 --- a/src/Custom/Models/OpenAIModelInfoCollection.cs +++ b/src/Custom/Models/OpenAIModelInfoCollection.cs @@ -49,7 +49,7 @@ public partial class OpenAIModelInfoCollection : ReadOnlyCollection /// /// - private IDictionary _serializedAdditionalRawData; + private IDictionary SerializedAdditionalRawData; /// Initializes a new instance of . /// @@ -68,7 +68,7 @@ internal OpenAIModelInfoCollection(InternalListModelsResponseObject @object, IRe : base([.. data]) { Object = @object; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } /// Initializes a new instance of for deserialization. diff --git a/src/Custom/Moderations/Internal/GeneratorStubs.cs b/src/Custom/Moderations/Internal/GeneratorStubs.cs index f4b1890c4..4e11648b7 100644 --- a/src/Custom/Moderations/Internal/GeneratorStubs.cs +++ b/src/Custom/Moderations/Internal/GeneratorStubs.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Moderations; +namespace OpenAI.Moderations; [CodeGenModel("CreateModerationRequestModel")] internal readonly partial struct InternalCreateModerationRequestModel { } \ No newline at end of file diff --git a/src/Custom/Moderations/ModerationCategories.cs b/src/Custom/Moderations/ModerationCategories.cs index 149ac4360..a5cbbe8bf 100644 --- a/src/Custom/Moderations/ModerationCategories.cs +++ b/src/Custom/Moderations/ModerationCategories.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Moderations; +namespace OpenAI.Moderations; [CodeGenModel("CreateModerationResponseResultCategories")] public partial class ModerationCategories diff --git a/src/Custom/Moderations/ModerationCategoryScores.cs b/src/Custom/Moderations/ModerationCategoryScores.cs index 89087fbb7..34b093f18 100644 --- a/src/Custom/Moderations/ModerationCategoryScores.cs +++ b/src/Custom/Moderations/ModerationCategoryScores.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Moderations; +namespace OpenAI.Moderations; [CodeGenModel("CreateModerationResponseResultCategoryScores")] public partial class ModerationCategoryScores diff --git a/src/Custom/Moderations/ModerationClient.Protocol.cs b/src/Custom/Moderations/ModerationClient.Protocol.cs index fdf1952dc..676ddc229 100644 --- a/src/Custom/Moderations/ModerationClient.Protocol.cs +++ b/src/Custom/Moderations/ModerationClient.Protocol.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.ComponentModel; diff --git a/src/Custom/Moderations/ModerationCollection.Serialization..cs b/src/Custom/Moderations/ModerationCollection.Serialization..cs index f1cb9d92e..1bf783f19 100644 --- a/src/Custom/Moderations/ModerationCollection.Serialization..cs +++ b/src/Custom/Moderations/ModerationCollection.Serialization..cs @@ -1,4 +1,4 @@ -// +// #nullable disable @@ -14,7 +14,7 @@ public partial class ModerationCollection : IJsonModel { // CUSTOM: // - Serialized the Items property. - // - Recovered the deserialization of _serializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. + // - Recovered the deserialization of SerializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) => CustomSerializationHelpers.SerializeInstance(this, SerializeModerationCollection, writer, options); @@ -32,11 +32,11 @@ internal static void SerializeModerationCollection(ModerationCollection instance writer.WriteObjectValue(item, options); } writer.WriteEndArray(); - writer.WriteSerializedAdditionalRawData(instance._serializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(instance.SerializedAdditionalRawData, options); writer.WriteEndObject(); } - // CUSTOM: Recovered the deserialization of _serializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. + // CUSTOM: Recovered the deserialization of SerializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. internal static ModerationCollection DeserializeModerationCollection(JsonElement element, ModelReaderWriterOptions options = null) { options ??= ModelSerializationExtensions.WireOptions; diff --git a/src/Custom/Moderations/ModerationCollection.cs b/src/Custom/Moderations/ModerationCollection.cs index 60039634f..ed2a4c6d1 100644 --- a/src/Custom/Moderations/ModerationCollection.cs +++ b/src/Custom/Moderations/ModerationCollection.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -41,7 +41,7 @@ public partial class ModerationCollection : ReadOnlyCollection /// /// /// - private IDictionary _serializedAdditionalRawData; + private IDictionary SerializedAdditionalRawData; /// Initializes a new instance of . /// The unique identifier for the moderation request. @@ -69,7 +69,7 @@ internal ModerationCollection(string id, string model, IReadOnlyList Initializes a new instance of for deserialization. diff --git a/src/Custom/Moderations/ModerationOptions.cs b/src/Custom/Moderations/ModerationOptions.cs index 093cddcdf..a2561defe 100644 --- a/src/Custom/Moderations/ModerationOptions.cs +++ b/src/Custom/Moderations/ModerationOptions.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; namespace OpenAI.Moderations; diff --git a/src/Custom/Moderations/ModerationResult.cs b/src/Custom/Moderations/ModerationResult.cs index 415a47a53..78e95f255 100644 --- a/src/Custom/Moderations/ModerationResult.cs +++ b/src/Custom/Moderations/ModerationResult.cs @@ -1,4 +1,4 @@ -namespace OpenAI.Moderations; +namespace OpenAI.Moderations; [CodeGenModel("CreateModerationResponseResult")] public partial class ModerationResult diff --git a/src/Custom/OpenAIClientOptions.cs b/src/Custom/OpenAIClientOptions.cs index 3a46b4796..81efabbd5 100644 --- a/src/Custom/OpenAIClientOptions.cs +++ b/src/Custom/OpenAIClientOptions.cs @@ -12,20 +12,20 @@ public partial class OpenAIClientOptions : ClientPipelineOptions /// /// A non-default base endpoint that clients should use when connecting. /// - public Uri Endpoint { get; init; } + public Uri Endpoint { get; set; } /// /// An optional application ID to use as part of the request User-Agent header. /// - public string ApplicationId { get; init; } + public string ApplicationId { get; set; } /// /// An optional ID added to OpenAI-Organization header /// - public string OrganizationId { get; init; } + public string OrganizationId { get; set; } /// /// An optional ID added to OpenAI-Project header /// - public string ProjectId { get; init; } + public string ProjectId { get; set; } } diff --git a/src/Custom/OpenAIModelFactory.cs b/src/Custom/OpenAIModelFactory.cs index e5b0d4c42..bd049d8c4 100644 --- a/src/Custom/OpenAIModelFactory.cs +++ b/src/Custom/OpenAIModelFactory.cs @@ -1,4 +1,4 @@ -using OpenAI.Embeddings; +using OpenAI.Embeddings; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Custom/VectorStores/VectorStore.cs b/src/Custom/VectorStores/VectorStore.cs index 4fecb7aae..04b8c79b7 100644 --- a/src/Custom/VectorStores/VectorStore.cs +++ b/src/Custom/VectorStores/VectorStore.cs @@ -1,4 +1,4 @@ -namespace OpenAI.VectorStores; +namespace OpenAI.VectorStores; /// /// A representation of a file storage and indexing container used by the file_search tool for assistants. diff --git a/src/Custom/VectorStores/VectorStoreBatchFileJob.cs b/src/Custom/VectorStores/VectorStoreBatchFileJob.cs index b27d59dba..507745bb3 100644 --- a/src/Custom/VectorStores/VectorStoreBatchFileJob.cs +++ b/src/Custom/VectorStores/VectorStoreBatchFileJob.cs @@ -1,4 +1,4 @@ -namespace OpenAI.VectorStores; +namespace OpenAI.VectorStores; /// /// Represents information about a bulk ingestion job of files into a vector store. diff --git a/src/Custom/VectorStores/VectorStoreBatchFileJobStatus.cs b/src/Custom/VectorStores/VectorStoreBatchFileJobStatus.cs index d65197875..84eb5e3f6 100644 --- a/src/Custom/VectorStores/VectorStoreBatchFileJobStatus.cs +++ b/src/Custom/VectorStores/VectorStoreBatchFileJobStatus.cs @@ -1,4 +1,4 @@ -namespace OpenAI.VectorStores; +namespace OpenAI.VectorStores; [CodeGenModel("VectorStoreFileBatchObjectStatus")] public readonly partial struct VectorStoreBatchFileJobStatus diff --git a/src/Custom/VectorStores/VectorStoreClient.Convenience.cs b/src/Custom/VectorStores/VectorStoreClient.Convenience.cs index 5330978b4..4148a8c16 100644 --- a/src/Custom/VectorStores/VectorStoreClient.Convenience.cs +++ b/src/Custom/VectorStores/VectorStoreClient.Convenience.cs @@ -1,4 +1,4 @@ -using OpenAI.Files; +using OpenAI.Files; using System.ClientModel; using System.Collections.Generic; using System.Linq; @@ -170,8 +170,11 @@ public virtual ClientResult RemoveFileFromStore(VectorStore vectorStore, O /// The vector store to associate files with. /// The files to associate with the vector store. /// A instance representing the batch operation. - public virtual Task> CreateBatchFileJobAsync(VectorStore vectorStore, IEnumerable files) - => CreateBatchFileJobAsync(vectorStore?.Id, files?.Select(file => file.Id)); + public virtual Task CreateBatchFileJobAsync( + ReturnWhen returnWhen, + VectorStore vectorStore, + IEnumerable files) + => CreateBatchFileJobAsync(returnWhen, vectorStore?.Id, files?.Select(file => file.Id)); /// /// Begins a batch job to associate multiple jobs with a vector store, beginning the ingestion process. @@ -179,69 +182,9 @@ public virtual Task> CreateBatchFileJobAsy /// The vector store to associate files with. /// The files to associate with the vector store. /// A instance representing the batch operation. - public virtual ClientResult CreateBatchFileJob(VectorStore vectorStore, IEnumerable files) - => CreateBatchFileJob(vectorStore?.Id, files?.Select(file => file.Id)); - - /// - /// Gets an updated instance of an existing , refreshing its status. - /// - /// The job to refresh. - /// The refreshed instance of . - public virtual Task> GetBatchFileJobAsync(VectorStoreBatchFileJob batchJob) - => GetBatchFileJobAsync(batchJob?.VectorStoreId, batchJob?.BatchId); - - /// - /// Gets an updated instance of an existing , refreshing its status. - /// - /// The job to refresh. - /// The refreshed instance of . - public virtual ClientResult GetBatchFileJob(VectorStoreBatchFileJob batchJob) - => GetBatchFileJob(batchJob?.VectorStoreId, batchJob?.BatchId); - - /// - /// Cancels an in-progress . - /// - /// The that should be canceled. - /// An updated instance. - public virtual Task> CancelBatchFileJobAsync(VectorStoreBatchFileJob batchJob) - => CancelBatchFileJobAsync(batchJob?.VectorStoreId, batchJob?.BatchId); - - /// - /// Cancels an in-progress . - /// - /// The that should be canceled. - /// An updated instance. - public virtual ClientResult CancelBatchFileJob(VectorStoreBatchFileJob batchJob) - => CancelBatchFileJob(batchJob?.VectorStoreId, batchJob?.BatchId); - - /// - /// Gets a page collection holding file associations associated with a vector store batch file job, representing the files - /// that were scheduled for ingestion into the vector store. - /// - /// The vector store batch file job to retrieve file associations from. - /// Options describing the collection to return. - /// holds pages of values. To obtain a collection of values, call - /// . To obtain the current - /// page of values, call . - /// A collection of pages of . - public virtual AsyncPageCollection GetFileAssociationsAsync( - VectorStoreBatchFileJob batchJob, - VectorStoreFileAssociationCollectionOptions options = default) - => GetFileAssociationsAsync(batchJob?.VectorStoreId, batchJob?.BatchId, options); - - /// - /// Gets a page collection holding file associations associated with a vector store batch file job, representing the files - /// that were scheduled for ingestion into the vector store. - /// - /// The vector store batch file job to retrieve file associations from. - /// Options describing the collection to return. - /// holds pages of values. To obtain a collection of values, call - /// . To obtain the current - /// page of values, call . - /// A collection of pages of . - public virtual PageCollection GetFileAssociations( - VectorStoreBatchFileJob batchJob, - VectorStoreFileAssociationCollectionOptions options = default) - => GetFileAssociations(batchJob?.VectorStoreId, batchJob?.BatchId, options); - + public virtual VectorStoreFileBatchOperation CreateBatchFileJob( + ReturnWhen returnWhen, + VectorStore vectorStore, + IEnumerable files) + => CreateBatchFileJob(returnWhen, vectorStore?.Id, files?.Select(file => file.Id)); } diff --git a/src/Custom/VectorStores/VectorStoreClient.Protocol.cs b/src/Custom/VectorStores/VectorStoreClient.Protocol.cs index c3c9dad7e..4adcd3616 100644 --- a/src/Custom/VectorStores/VectorStoreClient.Protocol.cs +++ b/src/Custom/VectorStores/VectorStoreClient.Protocol.cs @@ -1,8 +1,9 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; using System.ComponentModel; +using System.Text.Json; using System.Threading.Tasks; namespace OpenAI.VectorStores; @@ -433,13 +434,26 @@ public virtual ClientResult RemoveFileFromStore(string vectorStoreId, string fil /// Service returned a non-success status code. /// The response returned from the service. [EditorBrowsable(EditorBrowsableState.Never)] - public virtual async Task CreateBatchFileJobAsync(string vectorStoreId, BinaryContent content, RequestOptions options = null) + public virtual async Task CreateBatchFileJobAsync(ReturnWhen returnWhen, string vectorStoreId, BinaryContent content, RequestOptions options = null) { Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); Argument.AssertNotNull(content, nameof(content)); using PipelineMessage message = CreateCreateVectorStoreFileBatchRequest(vectorStoreId, content, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + PipelineResponse response = await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false); + + using JsonDocument doc = JsonDocument.Parse(response.Content); + string batchId = doc.RootElement.GetProperty("id"u8).GetString(); + string status = doc.RootElement.GetProperty("status"u8).GetString(); + + VectorStoreFileBatchOperation operation = new VectorStoreFileBatchOperation(_pipeline, _endpoint, vectorStoreId, batchId, status, response); + if (returnWhen == ReturnWhen.Started) + { + return operation; + } + + await operation.WaitForCompletionAsync(options?.CancellationToken ?? default).ConfigureAwait(false); + return operation; } /// @@ -453,170 +467,27 @@ public virtual async Task CreateBatchFileJobAsync(string vectorSto /// Service returned a non-success status code. /// The response returned from the service. [EditorBrowsable(EditorBrowsableState.Never)] - public virtual ClientResult CreateBatchFileJob(string vectorStoreId, BinaryContent content, RequestOptions options = null) + public virtual VectorStoreFileBatchOperation CreateBatchFileJob( + ReturnWhen returnWhen, + string vectorStoreId, BinaryContent content, RequestOptions options = null) { Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); Argument.AssertNotNull(content, nameof(content)); using PipelineMessage message = CreateCreateVectorStoreFileBatchRequest(vectorStoreId, content, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - /// - /// [Protocol Method] Retrieves a vector store file batch. - /// - /// The ID of the vector store that the file batch belongs to. - /// The ID of the file batch being retrieved. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// or is null. - /// or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - [EditorBrowsable(EditorBrowsableState.Never)] - public virtual async Task GetBatchFileJobAsync(string vectorStoreId, string batchId, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); - - using PipelineMessage message = CreateGetVectorStoreFileBatchRequest(vectorStoreId, batchId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - - /// - /// [Protocol Method] Retrieves a vector store file batch. - /// - /// The ID of the vector store that the file batch belongs to. - /// The ID of the file batch being retrieved. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// or is null. - /// or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - [EditorBrowsable(EditorBrowsableState.Never)] - public virtual ClientResult GetBatchFileJob(string vectorStoreId, string batchId, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); - - using PipelineMessage message = CreateGetVectorStoreFileBatchRequest(vectorStoreId, batchId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - /// - /// [Protocol Method] Cancel a vector store file batch. This attempts to cancel the processing of files in this batch as soon as possible. - /// - /// The ID of the vector store that the file batch belongs to. - /// The ID of the file batch to cancel. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// or is null. - /// or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - [EditorBrowsable(EditorBrowsableState.Never)] - public virtual async Task CancelBatchFileJobAsync(string vectorStoreId, string batchId, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); - - using PipelineMessage message = CreateCancelVectorStoreFileBatchRequest(vectorStoreId, batchId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - - /// - /// [Protocol Method] Cancel a vector store file batch. This attempts to cancel the processing of files in this batch as soon as possible. - /// - /// The ID of the vector store that the file batch belongs to. - /// The ID of the file batch to cancel. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// or is null. - /// or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// The response returned from the service. - [EditorBrowsable(EditorBrowsableState.Never)] - public virtual ClientResult CancelBatchFileJob(string vectorStoreId, string batchId, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); - - using PipelineMessage message = CreateCancelVectorStoreFileBatchRequest(vectorStoreId, batchId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - /// - /// [Protocol Method] Returns a paginated collection of vector store files in a batch. - /// - /// The ID of the vector store that the file batch belongs to. - /// The ID of the file batch that the files belong to. - /// - /// A limit on the number of objects to be returned. Limit can range between 1 and 100, and the - /// default is 20. - /// - /// - /// Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and`desc` - /// for descending order. Allowed values: "asc" | "desc" - /// - /// - /// A cursor for use in pagination. `after` is an object ID that defines your place in the list. - /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your - /// subsequent call can include after=obj_foo in order to fetch the next page of the list. - /// - /// - /// A cursor for use in pagination. `before` is an object ID that defines your place in the list. - /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your - /// subsequent call can include before=obj_foo in order to fetch the previous page of the list. - /// - /// Filter by file status. One of `in_progress`, `completed`, `failed`, `cancelled`. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// or is null. - /// or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// A collection of service responses, each holding a page of values. - [EditorBrowsable(EditorBrowsableState.Never)] - public virtual IAsyncEnumerable GetFileAssociationsAsync(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); + PipelineResponse response = _pipeline.ProcessMessage(message, options); - VectorStoreFileBatchesPageEnumerator enumerator = new VectorStoreFileBatchesPageEnumerator(_pipeline, _endpoint, vectorStoreId, batchId, limit, order, after, before, filter, options); - return PageCollectionHelpers.CreateAsync(enumerator); - } + using JsonDocument doc = JsonDocument.Parse(response.Content); + string batchId = doc.RootElement.GetProperty("id"u8).GetString(); + string status = doc.RootElement.GetProperty("status"u8).GetString(); - /// - /// [Protocol Method] Returns a paginated collection of vector store files in a batch. - /// - /// The ID of the vector store that the file batch belongs to. - /// The ID of the file batch that the files belong to. - /// - /// A limit on the number of objects to be returned. Limit can range between 1 and 100, and the - /// default is 20. - /// - /// - /// Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and`desc` - /// for descending order. Allowed values: "asc" | "desc" - /// - /// - /// A cursor for use in pagination. `after` is an object ID that defines your place in the list. - /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your - /// subsequent call can include after=obj_foo in order to fetch the next page of the list. - /// - /// - /// A cursor for use in pagination. `before` is an object ID that defines your place in the list. - /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your - /// subsequent call can include before=obj_foo in order to fetch the previous page of the list. - /// - /// Filter by file status. One of `in_progress`, `completed`, `failed`, `cancelled`. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// or is null. - /// or is an empty string, and was expected to be non-empty. - /// Service returned a non-success status code. - /// A collection of service responses, each holding a page of values. - [EditorBrowsable(EditorBrowsableState.Never)] - public virtual IEnumerable GetFileAssociations(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, RequestOptions options) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); + VectorStoreFileBatchOperation operation = new VectorStoreFileBatchOperation(_pipeline, _endpoint, vectorStoreId, batchId, status, response); + if (returnWhen == ReturnWhen.Started) + { + return operation; + } - VectorStoreFileBatchesPageEnumerator enumerator = new VectorStoreFileBatchesPageEnumerator(_pipeline, _endpoint, vectorStoreId, batchId, limit, order, after, before, filter, options); - return PageCollectionHelpers.Create(enumerator); + operation.WaitForCompletion(options?.CancellationToken ?? default); + return operation; } } diff --git a/src/Custom/VectorStores/VectorStoreClient.cs b/src/Custom/VectorStores/VectorStoreClient.cs index 0f7f46af6..c87d3cbb2 100644 --- a/src/Custom/VectorStores/VectorStoreClient.cs +++ b/src/Custom/VectorStores/VectorStoreClient.cs @@ -1,4 +1,4 @@ -using OpenAI.Files; +using OpenAI.Files; using System; using System.ClientModel; using System.ClientModel.Primitives; @@ -101,6 +101,70 @@ public virtual ClientResult CreateVectorStore(VectorStoreCreationOp return ClientResult.FromValue(VectorStore.FromResponse(result.GetRawResponse()), result.GetRawResponse()); } + /// + /// Gets an instance representing an existing based on its ID. + /// + /// The ID of the vector store to retrieve. + /// A token that can be used to cancel this method call. + /// A representation of an existing . + public virtual async Task> GetVectorStoreAsync(string vectorStoreId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + + ClientResult result + = await GetVectorStoreAsync(vectorStoreId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + return ClientResult.FromValue( + VectorStore.FromResponse(result.GetRawResponse()), result.GetRawResponse()); + } + + /// + /// Gets an instance representing an existing based on its ID. + /// + /// The ID of the vector store to retrieve. + /// A token that can be used to cancel this method call. + /// A representation of an existing . + public virtual ClientResult GetVectorStore(string vectorStoreId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + + ClientResult result = GetVectorStore(vectorStoreId, cancellationToken.ToRequestOptions()); + return ClientResult.FromValue(VectorStore.FromResponse(result.GetRawResponse()), result.GetRawResponse()); + } + + /// + /// Modifies an existing . + /// + /// The ID of the to modify. + /// The new options to apply to the . + /// A token that can be used to cancel this method call. + /// An updated representation of the modified . + public virtual async Task> ModifyVectorStoreAsync(string vectorStoreId, VectorStoreModificationOptions vectorStore, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNull(vectorStore, nameof(vectorStore)); + + using BinaryContent content = vectorStore.ToBinaryContent(); + ClientResult result = await ModifyVectorStoreAsync(vectorStoreId, content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + return ClientResult.FromValue(VectorStore.FromResponse(result.GetRawResponse()), result.GetRawResponse()); + } + + /// + /// Modifies an existing . + /// + /// The ID of the to modify. + /// The new options to apply to the . + /// A token that can be used to cancel this method call. + /// An updated representation of the modified . + public virtual ClientResult ModifyVectorStore(string vectorStoreId, VectorStoreModificationOptions vectorStore, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNull(vectorStore, nameof(vectorStore)); + + using BinaryContent content = vectorStore.ToBinaryContent(); + ClientResult result = ModifyVectorStore(vectorStoreId, content, cancellationToken.ToRequestOptions()); + return ClientResult.FromValue(VectorStore.FromResponse(result.GetRawResponse()), result.GetRawResponse()); + } + /// /// Deletes a vector store. /// @@ -476,295 +540,70 @@ public virtual ClientResult RemoveFileFromStore(string vectorStoreId, stri /// The IDs of the files to associate with the vector store. /// A token that can be used to cancel this method call. /// A instance representing the batch operation. - public virtual async Task> CreateBatchFileJobAsync(string vectorStoreId, IEnumerable fileIds, CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNullOrEmpty(fileIds, nameof(fileIds)); - - BinaryContent content = new InternalCreateVectorStoreFileBatchRequest(fileIds).ToBinaryContent(); - ClientResult result = await CreateBatchFileJobAsync(vectorStoreId, content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - PipelineResponse response = result?.GetRawResponse(); - VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromResponse(response); - return ClientResult.FromValue(value, response); - } - - /// - /// Begins a batch job to associate multiple jobs with a vector store, beginning the ingestion process. - /// - /// The ID of the vector store to associate files with. - /// The IDs of the files to associate with the vector store. - /// A token that can be used to cancel this method call. - /// A instance representing the batch operation. - public virtual ClientResult CreateBatchFileJob(string vectorStoreId, IEnumerable fileIds, CancellationToken cancellationToken = default) + public virtual async Task CreateBatchFileJobAsync( + ReturnWhen returnWhen, + string vectorStoreId, + IEnumerable fileIds, + CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); Argument.AssertNotNullOrEmpty(fileIds, nameof(fileIds)); BinaryContent content = new InternalCreateVectorStoreFileBatchRequest(fileIds).ToBinaryContent(); - ClientResult result = CreateBatchFileJob(vectorStoreId, content, cancellationToken.ToRequestOptions()); - PipelineResponse response = result?.GetRawResponse(); - VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromResponse(response); - return ClientResult.FromValue(value, response); - } - - /// - /// Gets an existing vector store batch file ingestion job from a known vector store ID and job ID. - /// - /// The ID of the vector store into which the batch of files was started. - /// The ID of the batch operation adding files to the vector store. - /// A token that can be used to cancel this method call. - /// A instance representing the ingestion operation. - public virtual async Task> GetBatchFileJobAsync(string vectorStoreId, string batchJobId, CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNullOrEmpty(batchJobId, nameof(batchJobId)); - - ClientResult result = await GetBatchFileJobAsync(vectorStoreId, batchJobId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - PipelineResponse response = result?.GetRawResponse(); - VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromResponse(response); - return ClientResult.FromValue(value, response); - } - - /// - /// Gets an existing vector store batch file ingestion job from a known vector store ID and job ID. - /// - /// The ID of the vector store into which the batch of files was started. - /// The ID of the batch operation adding files to the vector store. - /// A token that can be used to cancel this method call. - /// A instance representing the ingestion operation. - public virtual ClientResult GetBatchFileJob(string vectorStoreId, string batchJobId, CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNullOrEmpty(batchJobId, nameof(batchJobId)); - - ClientResult result = GetBatchFileJob(vectorStoreId, batchJobId, cancellationToken.ToRequestOptions()); - PipelineResponse response = result?.GetRawResponse(); - VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromResponse(response); - return ClientResult.FromValue(value, response); - } - - /// - /// Cancels an in-progress . - /// - /// - /// The ID of the that is the ingestion target of the batch job being cancelled. - /// - /// - /// The ID of the that should be canceled. - /// - /// A token that can be used to cancel this method call. - /// An updated instance. - public virtual async Task> CancelBatchFileJobAsync(string vectorStoreId, string batchJobId, CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNullOrEmpty(batchJobId, nameof(batchJobId)); + RequestOptions options = cancellationToken.ToRequestOptions(); - ClientResult result = await CancelBatchFileJobAsync(vectorStoreId, batchJobId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - PipelineResponse response = result?.GetRawResponse(); + using PipelineMessage message = CreateCreateVectorStoreFileBatchRequest(vectorStoreId, content, options); + PipelineResponse response = await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false); VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromResponse(response); - return ClientResult.FromValue(value, response); - } - - /// - /// Cancels an in-progress . - /// - /// - /// The ID of the that is the ingestion target of the batch job being cancelled. - /// - /// - /// The ID of the that should be canceled. - /// - /// A token that can be used to cancel this method call. - /// An updated instance. - public virtual ClientResult CancelBatchFileJob(string vectorStoreId, string batchJobId, CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNullOrEmpty(batchJobId, nameof(batchJobId)); - - ClientResult result = CancelBatchFileJob(vectorStoreId, batchJobId, cancellationToken.ToRequestOptions()); - PipelineResponse response = result?.GetRawResponse(); - VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromResponse(response); - return ClientResult.FromValue(value, response); - } - - /// - /// Gets a page collection of file associations associated with a vector store batch file job, representing the files - /// that were scheduled for ingestion into the vector store. - /// - /// - /// The ID of the vector store into which the file batch was scheduled for ingestion. - /// - /// - /// The ID of the batch file job that was previously scheduled. - /// - /// Options describing the collection to return. - /// A token that can be used to cancel this method call. - /// holds pages of values. To obtain a collection of values, call - /// . To obtain the current - /// page of values, call . - /// A collection of pages of . - public virtual AsyncPageCollection GetFileAssociationsAsync( - string vectorStoreId, - string batchJobId, - VectorStoreFileAssociationCollectionOptions options = default, - CancellationToken cancellationToken = default) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNullOrEmpty(batchJobId, nameof(batchJobId)); - - VectorStoreFileBatchesPageEnumerator enumerator = new(_pipeline, _endpoint, - vectorStoreId, - batchJobId, - options?.PageSize, - options?.Order?.ToString(), - options?.AfterId, - options?.BeforeId, - options?.Filter?.ToString(), - cancellationToken.ToRequestOptions()); - - return PageCollectionHelpers.CreateAsync(enumerator); - } - - /// - /// Rehydrates a page collection of file associations from a page token. - /// - /// - /// The ID of the vector store into which the file batch was scheduled for ingestion. - /// - /// - /// The ID of the batch file job that was previously scheduled. - /// - /// Page token corresponding to the first page of the collection to rehydrate. - /// A token that can be used to cancel this method call. - /// holds pages of values. To obtain a collection of values, call - /// . To obtain the current - /// page of values, call . - /// A collection of pages of . - public virtual AsyncPageCollection GetFileAssociationsAsync( - string vectorStoreId, - string batchJobId, - ContinuationToken firstPageToken, - CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(firstPageToken, nameof(firstPageToken)); - VectorStoreFileBatchesPageToken pageToken = VectorStoreFileBatchesPageToken.FromToken(firstPageToken); + VectorStoreFileBatchOperation operation = new VectorStoreFileBatchOperation( + _pipeline, + _endpoint, + ClientResult.FromValue(value, response)); - if (vectorStoreId != pageToken.VectorStoreId) + if (returnWhen == ReturnWhen.Started) { - throw new ArgumentException( - "Invalid page token. 'vectorStoreId' value does not match page token value.", - nameof(vectorStoreId)); + return operation; } - if (batchJobId != pageToken.BatchId) - { - throw new ArgumentException( - "Invalid page token. 'batchJobId' value does not match page token value.", - nameof(vectorStoreId)); - } - - VectorStoreFileBatchesPageEnumerator enumerator = new(_pipeline, _endpoint, - pageToken.VectorStoreId, - pageToken.BatchId, - pageToken.Limit, - pageToken.Order, - pageToken.After, - pageToken.Before, - pageToken.Filter, - cancellationToken.ToRequestOptions()); - - return PageCollectionHelpers.CreateAsync(enumerator); + await operation.WaitForCompletionAsync().ConfigureAwait(false); + return operation; } /// - /// Gets a page collection of file associations associated with a vector store batch file job, representing the files - /// that were scheduled for ingestion into the vector store. + /// Begins a batch job to associate multiple jobs with a vector store, beginning the ingestion process. /// - /// - /// The ID of the vector store into which the file batch was scheduled for ingestion. - /// - /// - /// The ID of the batch file job that was previously scheduled. - /// - /// Options describing the collection to return. + /// The ID of the vector store to associate files with. + /// The IDs of the files to associate with the vector store. /// A token that can be used to cancel this method call. - /// holds pages of values. To obtain a collection of values, call - /// . To obtain the current - /// page of values, call . - /// A collection of pages of . - public virtual PageCollection GetFileAssociations( + /// A instance representing the batch operation. + public virtual VectorStoreFileBatchOperation CreateBatchFileJob( + ReturnWhen returnWhen, string vectorStoreId, - string batchJobId, - VectorStoreFileAssociationCollectionOptions options = default, + IEnumerable fileIds, CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNullOrEmpty(batchJobId, nameof(batchJobId)); - - VectorStoreFileBatchesPageEnumerator enumerator = new(_pipeline, _endpoint, - vectorStoreId, - batchJobId, - options?.PageSize, - options?.Order?.ToString(), - options?.AfterId, - options?.BeforeId, - options?.Filter?.ToString(), - cancellationToken.ToRequestOptions()); - - return PageCollectionHelpers.Create(enumerator); - } + Argument.AssertNotNullOrEmpty(fileIds, nameof(fileIds)); - /// - /// Rehydrates a page collection of file associations from a page token. - /// that were scheduled for ingestion into the vector store. - /// - /// - /// The ID of the vector store into which the file batch was scheduled for ingestion. - /// - /// - /// The ID of the batch file job that was previously scheduled. - /// - /// Page token corresponding to the first page of the collection to rehydrate. - /// A token that can be used to cancel this method call. - /// holds pages of values. To obtain a collection of values, call - /// . To obtain the current - /// page of values, call . - /// A collection of pages of . - public virtual PageCollection GetFileAssociations( - string vectorStoreId, - string batchJobId, - ContinuationToken firstPageToken, - CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(firstPageToken, nameof(firstPageToken)); + BinaryContent content = new InternalCreateVectorStoreFileBatchRequest(fileIds).ToBinaryContent(); + RequestOptions options = cancellationToken.ToRequestOptions(); - VectorStoreFileBatchesPageToken pageToken = VectorStoreFileBatchesPageToken.FromToken(firstPageToken); + using PipelineMessage message = CreateCreateVectorStoreFileBatchRequest(vectorStoreId, content, options); + PipelineResponse response = _pipeline.ProcessMessage(message, options); + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromResponse(response); - if (vectorStoreId != pageToken.VectorStoreId) - { - throw new ArgumentException( - "Invalid page token. 'vectorStoreId' value does not match page token value.", - nameof(vectorStoreId)); - } + VectorStoreFileBatchOperation operation = new VectorStoreFileBatchOperation( + _pipeline, + _endpoint, + ClientResult.FromValue(value, response)); - if (batchJobId != pageToken.BatchId) + if (returnWhen == ReturnWhen.Started) { - throw new ArgumentException( - "Invalid page token. 'batchJobId' value does not match page token value.", - nameof(vectorStoreId)); + return operation; } - VectorStoreFileBatchesPageEnumerator enumerator = new(_pipeline, _endpoint, - pageToken.VectorStoreId, - pageToken.BatchId, - pageToken.Limit, - pageToken.Order, - pageToken.After, - pageToken.Before, - pageToken.Filter, - cancellationToken.ToRequestOptions()); - - return PageCollectionHelpers.Create(enumerator); + operation.WaitForCompletion(); + return operation; } } diff --git a/src/Custom/VectorStores/VectorStoreCollectionOptions.cs b/src/Custom/VectorStores/VectorStoreCollectionOptions.cs index de0834bd3..82dfac7dc 100644 --- a/src/Custom/VectorStores/VectorStoreCollectionOptions.cs +++ b/src/Custom/VectorStores/VectorStoreCollectionOptions.cs @@ -1,4 +1,4 @@ -namespace OpenAI.VectorStores; +namespace OpenAI.VectorStores; /// /// Represents addition options available when requesting a collection of instances. @@ -14,20 +14,20 @@ public VectorStoreCollectionOptions() { } /// The order that results should appear in the list according to /// their created_at timestamp. /// - public ListOrder? Order { get; init; } + public ListOrder? Order { get; set; } /// /// The number of values to return in a page result. /// - public int? PageSize { get; init; } + public int? PageSize { get; set; } /// /// The id of the item preceeding the first item in the collection. /// - public string AfterId { get; init; } + public string AfterId { get; set; } /// /// The id of the item following the last item in the collection. /// - public string BeforeId { get; init; } + public string BeforeId { get; set; } } diff --git a/src/Custom/VectorStores/VectorStoreCreationOptions.cs b/src/Custom/VectorStores/VectorStoreCreationOptions.cs index 26d71d608..97514c9f4 100644 --- a/src/Custom/VectorStores/VectorStoreCreationOptions.cs +++ b/src/Custom/VectorStores/VectorStoreCreationOptions.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; namespace OpenAI.VectorStores; @@ -6,12 +6,12 @@ namespace OpenAI.VectorStores; public partial class VectorStoreCreationOptions { /// A list of [File](/docs/api-reference/files) IDs that the vector store should use. Useful for tools like `file_search` that can access files. - public IList FileIds { get; init; } + public IList FileIds { get; set; } /// Gets or sets the policy that controls when the new vector store will be automatically deleted. [CodeGenMember("ExpiresAfter")] - public VectorStoreExpirationPolicy ExpirationPolicy { get; init; } + public VectorStoreExpirationPolicy ExpirationPolicy { get; set; } [CodeGenMember("ChunkingStrategy")] - public FileChunkingStrategy ChunkingStrategy { get; init; } + public FileChunkingStrategy ChunkingStrategy { get; set; } } diff --git a/src/Custom/VectorStores/VectorStoreExpirationAnchor.cs b/src/Custom/VectorStores/VectorStoreExpirationAnchor.cs index 71fad6b39..482276c40 100644 --- a/src/Custom/VectorStores/VectorStoreExpirationAnchor.cs +++ b/src/Custom/VectorStores/VectorStoreExpirationAnchor.cs @@ -1,4 +1,4 @@ -using System.ComponentModel; +using System.ComponentModel; namespace OpenAI.VectorStores; diff --git a/src/Custom/VectorStores/VectorStoreExpirationPolicy.cs b/src/Custom/VectorStores/VectorStoreExpirationPolicy.cs index 486f36fee..4357959e8 100644 --- a/src/Custom/VectorStores/VectorStoreExpirationPolicy.cs +++ b/src/Custom/VectorStores/VectorStoreExpirationPolicy.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -13,7 +13,7 @@ namespace OpenAI.VectorStores; [CodeGenSuppress(nameof(VectorStoreExpirationPolicy), typeof(VectorStoreExpirationAnchor), typeof(int), typeof(IDictionary))] public partial class VectorStoreExpirationPolicy { - private IDictionary _serializedAdditionalRawData; + private IDictionary SerializedAdditionalRawData; [CodeGenMember("Anchor")] private VectorStoreExpirationAnchor _anchor; @@ -24,14 +24,14 @@ public partial class VectorStoreExpirationPolicy public required VectorStoreExpirationAnchor Anchor { get => _anchor; - init => _anchor = value; + set => _anchor = value; } /// The number of days after the anchor time that the vector store will expire. public required int Days { get => _days; - init => _days = value; + set => _days = value; } /// Initializes a new instance of . @@ -46,7 +46,7 @@ public VectorStoreExpirationPolicy(VectorStoreExpirationAnchor anchor, int days) /// Initializes a new instance of . public VectorStoreExpirationPolicy() { - _serializedAdditionalRawData = new ChangeTrackingDictionary(); + SerializedAdditionalRawData = new ChangeTrackingDictionary(); } /// Initializes a new instance of . @@ -58,6 +58,6 @@ internal VectorStoreExpirationPolicy(VectorStoreExpirationAnchor anchor, int day { Anchor = anchor; Days = days; - _serializedAdditionalRawData = serializedAdditionalRawData ?? new ChangeTrackingDictionary(); + SerializedAdditionalRawData = serializedAdditionalRawData ?? new ChangeTrackingDictionary(); } } diff --git a/src/Custom/VectorStores/VectorStoreFileAssociation.cs b/src/Custom/VectorStores/VectorStoreFileAssociation.cs index 5d0513f14..9c680ab46 100644 --- a/src/Custom/VectorStores/VectorStoreFileAssociation.cs +++ b/src/Custom/VectorStores/VectorStoreFileAssociation.cs @@ -1,4 +1,4 @@ -namespace OpenAI.VectorStores; +namespace OpenAI.VectorStores; /// /// A representation of a file association between an uploaded file and a vector store. diff --git a/src/Custom/VectorStores/VectorStoreFileAssociationCollectionOptions.cs b/src/Custom/VectorStores/VectorStoreFileAssociationCollectionOptions.cs index cf1788a72..9880b0afd 100644 --- a/src/Custom/VectorStores/VectorStoreFileAssociationCollectionOptions.cs +++ b/src/Custom/VectorStores/VectorStoreFileAssociationCollectionOptions.cs @@ -1,4 +1,4 @@ -namespace OpenAI.VectorStores; +namespace OpenAI.VectorStores; /// /// Represents addition options available when requesting a collection of instances. @@ -14,25 +14,25 @@ public VectorStoreFileAssociationCollectionOptions() { } /// The order that results should appear in the list according to /// their created_at timestamp. /// - public ListOrder? Order { get; init; } + public ListOrder? Order { get; set; } /// /// The number of values to return in a page result. /// - public int? PageSize { get; init; } + public int? PageSize { get; set; } /// /// The id of the item preceeding the first item in the collection. /// - public string AfterId { get; init; } + public string AfterId { get; set; } /// /// The id of the item following the last item in the collection. /// - public string BeforeId { get; init; } + public string BeforeId { get; set; } /// /// A status filter that file associations must match to be included in the collection. /// - public VectorStoreFileStatusFilter? Filter { get; init; } + public VectorStoreFileStatusFilter? Filter { get; set; } } diff --git a/src/Custom/VectorStores/VectorStoreFileAssociationError.cs b/src/Custom/VectorStores/VectorStoreFileAssociationError.cs index 2b745978a..a682fe289 100644 --- a/src/Custom/VectorStores/VectorStoreFileAssociationError.cs +++ b/src/Custom/VectorStores/VectorStoreFileAssociationError.cs @@ -1,6 +1,6 @@ -namespace OpenAI.VectorStores; +namespace OpenAI.VectorStores; [CodeGenModel("VectorStoreFileObjectLastError")] -public partial struct VectorStoreFileAssociationError +public partial class VectorStoreFileAssociationError { } \ No newline at end of file diff --git a/src/Custom/VectorStores/VectorStoreFileAssociationErrorCode.cs b/src/Custom/VectorStores/VectorStoreFileAssociationErrorCode.cs index fbf81648f..8246d94f9 100644 --- a/src/Custom/VectorStores/VectorStoreFileAssociationErrorCode.cs +++ b/src/Custom/VectorStores/VectorStoreFileAssociationErrorCode.cs @@ -1,4 +1,4 @@ -namespace OpenAI.VectorStores; +namespace OpenAI.VectorStores; [CodeGenModel("VectorStoreFileObjectLastErrorCode")] public readonly partial struct VectorStoreFileAssociationErrorCode diff --git a/src/Custom/VectorStores/VectorStoreFileAssociationStatus.cs b/src/Custom/VectorStores/VectorStoreFileAssociationStatus.cs index 8890f08e6..a1bd0c55d 100644 --- a/src/Custom/VectorStores/VectorStoreFileAssociationStatus.cs +++ b/src/Custom/VectorStores/VectorStoreFileAssociationStatus.cs @@ -1,4 +1,4 @@ -using System.ComponentModel; +using System.ComponentModel; namespace OpenAI.VectorStores; diff --git a/src/To.Be.Generated/VectorStoreFileBatchesPageEnumerator.cs b/src/Custom/VectorStores/VectorStoreFileBatchesPageEnumerator.cs similarity index 99% rename from src/To.Be.Generated/VectorStoreFileBatchesPageEnumerator.cs rename to src/Custom/VectorStores/VectorStoreFileBatchesPageEnumerator.cs index cb1a78576..cd4f938e9 100644 --- a/src/To.Be.Generated/VectorStoreFileBatchesPageEnumerator.cs +++ b/src/Custom/VectorStores/VectorStoreFileBatchesPageEnumerator.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Text.Json; diff --git a/src/To.Be.Generated/VectorStoreFileBatchesPageToken.cs b/src/Custom/VectorStores/VectorStoreFileBatchesPageToken.cs similarity index 99% rename from src/To.Be.Generated/VectorStoreFileBatchesPageToken.cs rename to src/Custom/VectorStores/VectorStoreFileBatchesPageToken.cs index 8db14097f..50f807901 100644 --- a/src/To.Be.Generated/VectorStoreFileBatchesPageToken.cs +++ b/src/Custom/VectorStores/VectorStoreFileBatchesPageToken.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.Diagnostics; using System.IO; diff --git a/src/Custom/VectorStores/VectorStoreFileCounts.cs b/src/Custom/VectorStores/VectorStoreFileCounts.cs index 00c1686e4..049de2351 100644 --- a/src/Custom/VectorStores/VectorStoreFileCounts.cs +++ b/src/Custom/VectorStores/VectorStoreFileCounts.cs @@ -1,6 +1,6 @@ -namespace OpenAI.VectorStores; +namespace OpenAI.VectorStores; [CodeGenModel("VectorStoreObjectFileCounts")] -public readonly partial struct VectorStoreFileCounts +public partial class VectorStoreFileCounts { } \ No newline at end of file diff --git a/src/Custom/VectorStores/VectorStoreFileStatusFilter.cs b/src/Custom/VectorStores/VectorStoreFileStatusFilter.cs index 82e71336a..24f9fb964 100644 --- a/src/Custom/VectorStores/VectorStoreFileStatusFilter.cs +++ b/src/Custom/VectorStores/VectorStoreFileStatusFilter.cs @@ -1,4 +1,4 @@ -namespace OpenAI.VectorStores; +namespace OpenAI.VectorStores; [CodeGenModel("ListVectorStoreFilesFilter")] public readonly partial struct VectorStoreFileStatusFilter diff --git a/src/To.Be.Generated/VectorStoreFilesPageEnumerator.cs b/src/Custom/VectorStores/VectorStoreFilesPageEnumerator.cs similarity index 99% rename from src/To.Be.Generated/VectorStoreFilesPageEnumerator.cs rename to src/Custom/VectorStores/VectorStoreFilesPageEnumerator.cs index d78384e31..3063fb397 100644 --- a/src/To.Be.Generated/VectorStoreFilesPageEnumerator.cs +++ b/src/Custom/VectorStores/VectorStoreFilesPageEnumerator.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Text.Json; diff --git a/src/To.Be.Generated/VectorStoreFilesPageToken.cs b/src/Custom/VectorStores/VectorStoreFilesPageToken.cs similarity index 99% rename from src/To.Be.Generated/VectorStoreFilesPageToken.cs rename to src/Custom/VectorStores/VectorStoreFilesPageToken.cs index ba7b1f9eb..c5112807f 100644 --- a/src/To.Be.Generated/VectorStoreFilesPageToken.cs +++ b/src/Custom/VectorStores/VectorStoreFilesPageToken.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.Diagnostics; using System.IO; diff --git a/src/Custom/VectorStores/VectorStoreModificationOptions.cs b/src/Custom/VectorStores/VectorStoreModificationOptions.cs index b2bfe8163..964a1a865 100644 --- a/src/Custom/VectorStores/VectorStoreModificationOptions.cs +++ b/src/Custom/VectorStores/VectorStoreModificationOptions.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; namespace OpenAI.VectorStores; @@ -7,5 +7,5 @@ public partial class VectorStoreModificationOptions { /// Gets or sets the policy that controls when the new vector store will be automatically deleted. [CodeGenMember("ExpiresAfter")] - public VectorStoreExpirationPolicy ExpirationPolicy { get; init; } + public VectorStoreExpirationPolicy ExpirationPolicy { get; set; } } diff --git a/src/Custom/VectorStores/VectorStoreStatus.cs b/src/Custom/VectorStores/VectorStoreStatus.cs index e4c7e842c..0f482a942 100644 --- a/src/Custom/VectorStores/VectorStoreStatus.cs +++ b/src/Custom/VectorStores/VectorStoreStatus.cs @@ -1,4 +1,4 @@ -using System.ComponentModel; +using System.ComponentModel; namespace OpenAI.VectorStores; diff --git a/src/To.Be.Generated/VectorStoresPageEnumerator.cs b/src/Custom/VectorStores/VectorStoresPageEnumerator.cs similarity index 99% rename from src/To.Be.Generated/VectorStoresPageEnumerator.cs rename to src/Custom/VectorStores/VectorStoresPageEnumerator.cs index 4a2aac725..3e454f384 100644 --- a/src/To.Be.Generated/VectorStoresPageEnumerator.cs +++ b/src/Custom/VectorStores/VectorStoresPageEnumerator.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Text.Json; diff --git a/src/To.Be.Generated/VectorStoresPageToken.cs b/src/Custom/VectorStores/VectorStoresPageToken.cs similarity index 99% rename from src/To.Be.Generated/VectorStoresPageToken.cs rename to src/Custom/VectorStores/VectorStoresPageToken.cs index bd4c29a2d..88134bfcd 100644 --- a/src/To.Be.Generated/VectorStoresPageToken.cs +++ b/src/Custom/VectorStores/VectorStoresPageToken.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ClientModel; using System.Diagnostics; using System.IO; diff --git a/src/Generated/AssistantClient.cs b/src/Generated/AssistantClient.cs index c9222cf73..14c304e84 100644 --- a/src/Generated/AssistantClient.cs +++ b/src/Generated/AssistantClient.cs @@ -24,42 +24,6 @@ protected AssistantClient() { } - public virtual async Task> GetAssistantAsync(string assistantId) - { - Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); - - ClientResult result = await GetAssistantAsync(assistantId, null).ConfigureAwait(false); - return ClientResult.FromValue(Assistant.FromResponse(result.GetRawResponse()), result.GetRawResponse()); - } - - public virtual ClientResult GetAssistant(string assistantId) - { - Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); - - ClientResult result = GetAssistant(assistantId, null); - return ClientResult.FromValue(Assistant.FromResponse(result.GetRawResponse()), result.GetRawResponse()); - } - - public virtual async Task> ModifyAssistantAsync(string assistantId, AssistantModificationOptions assistant) - { - Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); - Argument.AssertNotNull(assistant, nameof(assistant)); - - using BinaryContent content = assistant.ToBinaryContent(); - ClientResult result = await ModifyAssistantAsync(assistantId, content, null).ConfigureAwait(false); - return ClientResult.FromValue(Assistant.FromResponse(result.GetRawResponse()), result.GetRawResponse()); - } - - public virtual ClientResult ModifyAssistant(string assistantId, AssistantModificationOptions assistant) - { - Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); - Argument.AssertNotNull(assistant, nameof(assistant)); - - using BinaryContent content = assistant.ToBinaryContent(); - ClientResult result = ModifyAssistant(assistantId, content, null); - return ClientResult.FromValue(Assistant.FromResponse(result.GetRawResponse()), result.GetRawResponse()); - } - internal PipelineMessage CreateCreateAssistantRequest(BinaryContent content, RequestOptions options) { var message = _pipeline.CreateMessage(); diff --git a/src/Generated/BatchClient.cs b/src/Generated/BatchClient.cs index 3ccd2f901..ff92edefa 100644 --- a/src/Generated/BatchClient.cs +++ b/src/Generated/BatchClient.cs @@ -81,23 +81,6 @@ internal PipelineMessage CreateRetrieveBatchRequest(string batchId, RequestOptio return message; } - internal PipelineMessage CreateCancelBatchRequest(string batchId, RequestOptions options) - { - var message = _pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "POST"; - var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/batches/", false); - uri.AppendPath(batchId, true); - uri.AppendPath("/cancel", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - private static PipelineMessageClassifier _pipelineMessageClassifier200; private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 ??= PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); } diff --git a/src/Generated/FineTuningClient.cs b/src/Generated/FineTuningClient.cs index 7424e0331..1427659ef 100644 --- a/src/Generated/FineTuningClient.cs +++ b/src/Generated/FineTuningClient.cs @@ -71,89 +71,6 @@ internal PipelineMessage CreateGetPaginatedFineTuningJobsRequest(string after, i return message; } - internal PipelineMessage CreateRetrieveFineTuningJobRequest(string fineTuningJobId, RequestOptions options) - { - var message = _pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "GET"; - var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/fine_tuning/jobs/", false); - uri.AppendPath(fineTuningJobId, true); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - - internal PipelineMessage CreateCancelFineTuningJobRequest(string fineTuningJobId, RequestOptions options) - { - var message = _pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "POST"; - var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/fine_tuning/jobs/", false); - uri.AppendPath(fineTuningJobId, true); - uri.AppendPath("/cancel", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - - internal PipelineMessage CreateGetFineTuningJobCheckpointsRequest(string fineTuningJobId, string after, int? limit, RequestOptions options) - { - var message = _pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "GET"; - var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/fine_tuning/jobs/", false); - uri.AppendPath(fineTuningJobId, true); - uri.AppendPath("/checkpoints", false); - if (after != null) - { - uri.AppendQuery("after", after, true); - } - if (limit != null) - { - uri.AppendQuery("limit", limit.Value, true); - } - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - - internal PipelineMessage CreateGetFineTuningEventsRequest(string fineTuningJobId, string after, int? limit, RequestOptions options) - { - var message = _pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "GET"; - var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/fine_tuning/jobs/", false); - uri.AppendPath(fineTuningJobId, true); - uri.AppendPath("/events", false); - if (after != null) - { - uri.AppendQuery("after", after, true); - } - if (limit != null) - { - uri.AppendQuery("limit", limit.Value, true); - } - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - private static PipelineMessageClassifier _pipelineMessageClassifier200; private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 ??= PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); } diff --git a/src/Generated/Internal/BinaryContentHelper.cs b/src/Generated/Internal/BinaryContentHelper.cs index 5ebcd95b2..52bcdbdf3 100644 --- a/src/Generated/Internal/BinaryContentHelper.cs +++ b/src/Generated/Internal/BinaryContentHelper.cs @@ -52,6 +52,20 @@ public static BinaryContent FromEnumerable(IEnumerable enumerable) return content; } + public static BinaryContent FromEnumerable(ReadOnlySpan span) + where T : notnull + { + Utf8JsonBinaryContent content = new Utf8JsonBinaryContent(); + content.JsonWriter.WriteStartArray(); + for (int i = 0; i < span.Length; i++) + { + content.JsonWriter.WriteObjectValue(span[i], ModelSerializationExtensions.WireOptions); + } + content.JsonWriter.WriteEndArray(); + + return content; + } + public static BinaryContent FromDictionary(IDictionary dictionary) where TValue : notnull { diff --git a/src/Generated/Internal/ModelSerializationExtensions.cs b/src/Generated/Internal/ModelSerializationExtensions.cs index adaa0de21..d1334d37b 100644 --- a/src/Generated/Internal/ModelSerializationExtensions.cs +++ b/src/Generated/Internal/ModelSerializationExtensions.cs @@ -15,6 +15,7 @@ namespace OpenAI internal static class ModelSerializationExtensions { internal static readonly ModelReaderWriterOptions WireOptions = new ModelReaderWriterOptions("W"); + internal static readonly BinaryData SentinelValue = BinaryData.FromObjectAsJson("__EMPTY__"); public static object GetObject(this JsonElement element) { @@ -249,6 +250,13 @@ public static void WriteObjectValue(this Utf8JsonWriter writer, object value, Mo writer.WriteObjectValue(value, options); } + internal static bool IsSentinelValue(BinaryData value) + { + ReadOnlySpan sentinelSpan = SentinelValue.ToMemory().Span; + ReadOnlySpan valueSpan = value.ToMemory().Span; + return sentinelSpan.SequenceEqual(valueSpan); + } + internal static class TypeFormatters { private const string RoundtripZFormat = "yyyy-MM-ddTHH:mm:ss.fffffffZ"; diff --git a/src/Generated/InternalAssistantMessageClient.cs b/src/Generated/InternalAssistantMessageClient.cs index 46099c201..5ad0ce023 100644 --- a/src/Generated/InternalAssistantMessageClient.cs +++ b/src/Generated/InternalAssistantMessageClient.cs @@ -24,6 +24,22 @@ protected InternalAssistantMessageClient() { } + public virtual async Task GetMessagesAsync(string threadId, int? limit, string order, string after, string before, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + + using PipelineMessage message = CreateGetMessagesRequest(threadId, limit, order, after, before, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult GetMessages(string threadId, int? limit, string order, string after, string before, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + + using PipelineMessage message = CreateGetMessagesRequest(threadId, limit, order, after, before, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + internal PipelineMessage CreateCreateMessageRequest(string threadId, BinaryContent content, RequestOptions options) { var message = _pipeline.CreateMessage(); diff --git a/src/Generated/InternalAssistantRunClient.cs b/src/Generated/InternalAssistantRunClient.cs index c8c207270..b079a8a5e 100644 --- a/src/Generated/InternalAssistantRunClient.cs +++ b/src/Generated/InternalAssistantRunClient.cs @@ -24,6 +24,40 @@ protected InternalAssistantRunClient() { } + public virtual async Task GetRunsAsync(string threadId, int? limit, string order, string after, string before, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + + using PipelineMessage message = CreateGetRunsRequest(threadId, limit, order, after, before, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult GetRuns(string threadId, int? limit, string order, string after, string before, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + + using PipelineMessage message = CreateGetRunsRequest(threadId, limit, order, after, before, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + public virtual async Task GetRunStepsAsync(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + + using PipelineMessage message = CreateGetRunStepsRequest(threadId, runId, limit, order, after, before, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult GetRunSteps(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + + using PipelineMessage message = CreateGetRunStepsRequest(threadId, runId, limit, order, after, before, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + internal PipelineMessage CreateCreateThreadAndRunRequest(BinaryContent content, RequestOptions options) { var message = _pipeline.CreateMessage(); diff --git a/src/Generated/Models/Assistant.Serialization.cs b/src/Generated/Models/Assistant.Serialization.cs index 2b1582491..90cef00f3 100644 --- a/src/Generated/Models/Assistant.Serialization.cs +++ b/src/Generated/Models/Assistant.Serialization.cs @@ -21,49 +21,73 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - if (Name != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); } - else + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - writer.WriteNull("name"); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - if (Description != null) + if (SerializedAdditionalRawData?.ContainsKey("created_at") != true) { - writer.WritePropertyName("description"u8); - writer.WriteStringValue(Description); + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); } - else + if (SerializedAdditionalRawData?.ContainsKey("name") != true) { - writer.WriteNull("description"); + if (Name != null) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + else + { + writer.WriteNull("name"); + } } - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model); - if (Instructions != null) + if (SerializedAdditionalRawData?.ContainsKey("description") != true) { - writer.WritePropertyName("instructions"u8); - writer.WriteStringValue(Instructions); + if (Description != null) + { + writer.WritePropertyName("description"u8); + writer.WriteStringValue(Description); + } + else + { + writer.WriteNull("description"); + } + } + if (SerializedAdditionalRawData?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); } - else + if (SerializedAdditionalRawData?.ContainsKey("instructions") != true) { - writer.WriteNull("instructions"); + if (Instructions != null) + { + writer.WritePropertyName("instructions"u8); + writer.WriteStringValue(Instructions); + } + else + { + writer.WriteNull("instructions"); + } } - writer.WritePropertyName("tools"u8); - writer.WriteStartArray(); - foreach (var item in Tools) + if (SerializedAdditionalRawData?.ContainsKey("tools") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("tools"u8); + writer.WriteStartArray(); + foreach (var item in Tools) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); } - writer.WriteEndArray(); - if (Optional.IsDefined(ToolResources)) + if (SerializedAdditionalRawData?.ContainsKey("tool_resources") != true && Optional.IsDefined(ToolResources)) { if (ToolResources != null) { @@ -75,22 +99,25 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions writer.WriteNull("tool_resources"); } } - if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true) { - writer.WritePropertyName("metadata"u8); - writer.WriteStartObject(); - foreach (var item in Metadata) + if (Metadata != null && Optional.IsCollectionDefined(Metadata)) { - writer.WritePropertyName(item.Key); - writer.WriteStringValue(item.Value); + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + else + { + writer.WriteNull("metadata"); } - writer.WriteEndObject(); - } - else - { - writer.WriteNull("metadata"); } - if (Optional.IsDefined(Temperature)) + if (SerializedAdditionalRawData?.ContainsKey("temperature") != true && Optional.IsDefined(Temperature)) { if (Temperature != null) { @@ -102,7 +129,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions writer.WriteNull("temperature"); } } - if (Optional.IsDefined(NucleusSamplingFactor)) + if (SerializedAdditionalRawData?.ContainsKey("top_p") != true && Optional.IsDefined(NucleusSamplingFactor)) { if (NucleusSamplingFactor != null) { @@ -114,7 +141,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions writer.WriteNull("top_p"); } } - if (Optional.IsDefined(ResponseFormat)) + if (SerializedAdditionalRawData?.ContainsKey("response_format") != true && Optional.IsDefined(ResponseFormat)) { if (ResponseFormat != null) { @@ -126,10 +153,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions writer.WriteNull("response_format"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -296,8 +327,9 @@ internal static Assistant DeserializeAssistant(JsonElement element, ModelReaderW responseFormat = AssistantResponseFormat.DeserializeAssistantResponseFormat(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/Assistant.cs b/src/Generated/Models/Assistant.cs index aeeae167f..db507e169 100644 --- a/src/Generated/Models/Assistant.cs +++ b/src/Generated/Models/Assistant.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { public partial class Assistant { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal Assistant(string id, DateTimeOffset createdAt, string name, string description, string model, string instructions, IEnumerable tools, IReadOnlyDictionary metadata) { Argument.AssertNotNull(id, nameof(id)); @@ -43,7 +42,7 @@ internal Assistant(string id, InternalAssistantObjectObject @object, DateTimeOff Temperature = temperature; NucleusSamplingFactor = nucleusSamplingFactor; ResponseFormat = responseFormat; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal Assistant() diff --git a/src/Generated/Models/AssistantChatMessage.Serialization.cs b/src/Generated/Models/AssistantChatMessage.Serialization.cs index f0a4402f0..6e910e5e1 100644 --- a/src/Generated/Models/AssistantChatMessage.Serialization.cs +++ b/src/Generated/Models/AssistantChatMessage.Serialization.cs @@ -80,8 +80,9 @@ internal static AssistantChatMessage DeserializeAssistantChatMessage(JsonElement DeserializeContentValue(property, ref content); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/AssistantChatMessage.cs b/src/Generated/Models/AssistantChatMessage.cs index 597f07597..38f6c207d 100644 --- a/src/Generated/Models/AssistantChatMessage.cs +++ b/src/Generated/Models/AssistantChatMessage.cs @@ -16,6 +16,6 @@ internal AssistantChatMessage(string role, IList content FunctionCall = functionCall; } public IList ToolCalls { get; } - public ChatFunctionCall FunctionCall { get; init; } + public ChatFunctionCall FunctionCall { get; set; } } } diff --git a/src/Generated/Models/AssistantCreationOptions.Serialization.cs b/src/Generated/Models/AssistantCreationOptions.Serialization.cs index bd3c9e3a7..906335b7a 100644 --- a/src/Generated/Models/AssistantCreationOptions.Serialization.cs +++ b/src/Generated/Models/AssistantCreationOptions.Serialization.cs @@ -21,9 +21,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead } writer.WriteStartObject(); - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model); - if (Optional.IsDefined(Name)) + if (SerializedAdditionalRawData?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (SerializedAdditionalRawData?.ContainsKey("name") != true && Optional.IsDefined(Name)) { if (Name != null) { @@ -35,7 +38,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteNull("name"); } } - if (Optional.IsDefined(Description)) + if (SerializedAdditionalRawData?.ContainsKey("description") != true && Optional.IsDefined(Description)) { if (Description != null) { @@ -47,7 +50,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteNull("description"); } } - if (Optional.IsDefined(Instructions)) + if (SerializedAdditionalRawData?.ContainsKey("instructions") != true && Optional.IsDefined(Instructions)) { if (Instructions != null) { @@ -59,7 +62,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteNull("instructions"); } } - if (Optional.IsCollectionDefined(Tools)) + if (SerializedAdditionalRawData?.ContainsKey("tools") != true && Optional.IsCollectionDefined(Tools)) { writer.WritePropertyName("tools"u8); writer.WriteStartArray(); @@ -69,7 +72,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead } writer.WriteEndArray(); } - if (Optional.IsDefined(ToolResources)) + if (SerializedAdditionalRawData?.ContainsKey("tool_resources") != true && Optional.IsDefined(ToolResources)) { if (ToolResources != null) { @@ -81,7 +84,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteNull("tool_resources"); } } - if (Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true && Optional.IsCollectionDefined(Metadata)) { if (Metadata != null) { @@ -99,7 +102,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteNull("metadata"); } } - if (Optional.IsDefined(Temperature)) + if (SerializedAdditionalRawData?.ContainsKey("temperature") != true && Optional.IsDefined(Temperature)) { if (Temperature != null) { @@ -111,7 +114,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteNull("temperature"); } } - if (Optional.IsDefined(NucleusSamplingFactor)) + if (SerializedAdditionalRawData?.ContainsKey("top_p") != true && Optional.IsDefined(NucleusSamplingFactor)) { if (NucleusSamplingFactor != null) { @@ -123,7 +126,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteNull("top_p"); } } - if (Optional.IsDefined(ResponseFormat)) + if (SerializedAdditionalRawData?.ContainsKey("response_format") != true && Optional.IsDefined(ResponseFormat)) { if (ResponseFormat != null) { @@ -135,10 +138,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteNull("response_format"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -290,8 +297,9 @@ internal static AssistantCreationOptions DeserializeAssistantCreationOptions(Jso responseFormat = AssistantResponseFormat.DeserializeAssistantResponseFormat(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/AssistantCreationOptions.cs b/src/Generated/Models/AssistantCreationOptions.cs index f58beb0c2..9e0ed5afc 100644 --- a/src/Generated/Models/AssistantCreationOptions.cs +++ b/src/Generated/Models/AssistantCreationOptions.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants { public partial class AssistantCreationOptions { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal AssistantCreationOptions(string model, string name, string description, string instructions, IList tools, ToolResources toolResources, IDictionary metadata, float? temperature, float? nucleusSamplingFactor, AssistantResponseFormat responseFormat, IDictionary serializedAdditionalRawData) { @@ -23,12 +23,12 @@ internal AssistantCreationOptions(string model, string name, string description, Temperature = temperature; NucleusSamplingFactor = nucleusSamplingFactor; ResponseFormat = responseFormat; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public string Name { get; init; } - public string Description { get; init; } - public string Instructions { get; init; } - public IDictionary Metadata { get; } - public float? Temperature { get; init; } + public string Name { get; set; } + public string Description { get; set; } + public string Instructions { get; set; } + public IDictionary Metadata { get; set; } + public float? Temperature { get; set; } } } diff --git a/src/Generated/Models/AssistantModificationOptions.Serialization.cs b/src/Generated/Models/AssistantModificationOptions.Serialization.cs index 84b66ead7..dac67ae72 100644 --- a/src/Generated/Models/AssistantModificationOptions.Serialization.cs +++ b/src/Generated/Models/AssistantModificationOptions.Serialization.cs @@ -21,12 +21,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model } writer.WriteStartObject(); - if (Optional.IsDefined(Model)) + if (SerializedAdditionalRawData?.ContainsKey("model") != true && Optional.IsDefined(Model)) { writer.WritePropertyName("model"u8); writer.WriteStringValue(Model); } - if (Optional.IsDefined(Name)) + if (SerializedAdditionalRawData?.ContainsKey("name") != true && Optional.IsDefined(Name)) { if (Name != null) { @@ -38,7 +38,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteNull("name"); } } - if (Optional.IsDefined(Description)) + if (SerializedAdditionalRawData?.ContainsKey("description") != true && Optional.IsDefined(Description)) { if (Description != null) { @@ -50,7 +50,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteNull("description"); } } - if (Optional.IsDefined(Instructions)) + if (SerializedAdditionalRawData?.ContainsKey("instructions") != true && Optional.IsDefined(Instructions)) { if (Instructions != null) { @@ -62,7 +62,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteNull("instructions"); } } - if (Optional.IsCollectionDefined(DefaultTools)) + if (SerializedAdditionalRawData?.ContainsKey("tools") != true && Optional.IsCollectionDefined(DefaultTools)) { writer.WritePropertyName("tools"u8); writer.WriteStartArray(); @@ -72,7 +72,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model } writer.WriteEndArray(); } - if (Optional.IsDefined(ToolResources)) + if (SerializedAdditionalRawData?.ContainsKey("tool_resources") != true && Optional.IsDefined(ToolResources)) { if (ToolResources != null) { @@ -84,7 +84,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteNull("tool_resources"); } } - if (Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true && Optional.IsCollectionDefined(Metadata)) { if (Metadata != null) { @@ -102,7 +102,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteNull("metadata"); } } - if (Optional.IsDefined(Temperature)) + if (SerializedAdditionalRawData?.ContainsKey("temperature") != true && Optional.IsDefined(Temperature)) { if (Temperature != null) { @@ -114,7 +114,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteNull("temperature"); } } - if (Optional.IsDefined(NucleusSamplingFactor)) + if (SerializedAdditionalRawData?.ContainsKey("top_p") != true && Optional.IsDefined(NucleusSamplingFactor)) { if (NucleusSamplingFactor != null) { @@ -126,7 +126,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteNull("top_p"); } } - if (Optional.IsDefined(ResponseFormat)) + if (SerializedAdditionalRawData?.ContainsKey("response_format") != true && Optional.IsDefined(ResponseFormat)) { if (ResponseFormat != null) { @@ -138,10 +138,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteNull("response_format"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -293,8 +297,9 @@ internal static AssistantModificationOptions DeserializeAssistantModificationOpt responseFormat = AssistantResponseFormat.DeserializeAssistantResponseFormat(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/AssistantModificationOptions.cs b/src/Generated/Models/AssistantModificationOptions.cs index 2fba80ca0..baa7fed1a 100644 --- a/src/Generated/Models/AssistantModificationOptions.cs +++ b/src/Generated/Models/AssistantModificationOptions.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class AssistantModificationOptions { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public AssistantModificationOptions() { DefaultTools = new ChangeTrackingList(); @@ -29,12 +28,12 @@ internal AssistantModificationOptions(string model, string name, string descript Temperature = temperature; NucleusSamplingFactor = nucleusSamplingFactor; ResponseFormat = responseFormat; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public string Name { get; init; } - public string Description { get; init; } - public string Instructions { get; init; } - public IDictionary Metadata { get; } - public float? Temperature { get; init; } + public string Name { get; set; } + public string Description { get; set; } + public string Instructions { get; set; } + public IDictionary Metadata { get; set; } + public float? Temperature { get; set; } } } diff --git a/src/Generated/Models/AssistantResponseFormat.cs b/src/Generated/Models/AssistantResponseFormat.cs index 3572d8982..da67ee999 100644 --- a/src/Generated/Models/AssistantResponseFormat.cs +++ b/src/Generated/Models/AssistantResponseFormat.cs @@ -11,7 +11,7 @@ public partial class AssistantResponseFormat { internal AssistantResponseFormat(IDictionary serializedAdditionalRawData) { - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } } } diff --git a/src/Generated/Models/AssistantThread.Serialization.cs b/src/Generated/Models/AssistantThread.Serialization.cs index 4cc94d921..9062e18d5 100644 --- a/src/Generated/Models/AssistantThread.Serialization.cs +++ b/src/Generated/Models/AssistantThread.Serialization.cs @@ -21,40 +21,59 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterO } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - if (ToolResources != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - writer.WritePropertyName("tool_resources"u8); - writer.WriteObjectValue(ToolResources, options); + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); } - else + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - writer.WriteNull("tool_resources"); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("created_at") != true) { - writer.WritePropertyName("metadata"u8); - writer.WriteStartObject(); - foreach (var item in Metadata) + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (SerializedAdditionalRawData?.ContainsKey("tool_resources") != true) + { + if (ToolResources != null) { - writer.WritePropertyName(item.Key); - writer.WriteStringValue(item.Value); + writer.WritePropertyName("tool_resources"u8); + writer.WriteObjectValue(ToolResources, options); + } + else + { + writer.WriteNull("tool_resources"); } - writer.WriteEndObject(); } - else + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true) { - writer.WriteNull("metadata"); + if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + else + { + writer.WriteNull("metadata"); + } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -138,8 +157,9 @@ internal static AssistantThread DeserializeAssistantThread(JsonElement element, metadata = dictionary; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/AssistantThread.cs b/src/Generated/Models/AssistantThread.cs index 7267b09f4..6cec49e4b 100644 --- a/src/Generated/Models/AssistantThread.cs +++ b/src/Generated/Models/AssistantThread.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class AssistantThread { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal AssistantThread(string id, DateTimeOffset createdAt, ToolResources toolResources, IReadOnlyDictionary metadata) { Argument.AssertNotNull(id, nameof(id)); @@ -28,7 +27,7 @@ internal AssistantThread(string id, InternalThreadObjectObject @object, DateTime CreatedAt = createdAt; ToolResources = toolResources; Metadata = metadata; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal AssistantThread() diff --git a/src/Generated/Models/AudioTranscription.Serialization.cs b/src/Generated/Models/AudioTranscription.Serialization.cs index 5f5363441..f9dd68a11 100644 --- a/src/Generated/Models/AudioTranscription.Serialization.cs +++ b/src/Generated/Models/AudioTranscription.Serialization.cs @@ -21,15 +21,27 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteStartObject(); - writer.WritePropertyName("task"u8); - writer.WriteStringValue(Task.ToString()); - writer.WritePropertyName("language"u8); - writer.WriteStringValue(Language); - writer.WritePropertyName("duration"u8); - writer.WriteNumberValue(Convert.ToDouble(Duration.Value.ToString("s\\.FFF"))); - writer.WritePropertyName("text"u8); - writer.WriteStringValue(Text); - if (Optional.IsCollectionDefined(Words)) + if (SerializedAdditionalRawData?.ContainsKey("task") != true) + { + writer.WritePropertyName("task"u8); + writer.WriteStringValue(Task.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("language") != true) + { + writer.WritePropertyName("language"u8); + writer.WriteStringValue(Language); + } + if (SerializedAdditionalRawData?.ContainsKey("duration") != true) + { + writer.WritePropertyName("duration"u8); + writer.WriteNumberValue(Convert.ToDouble(Duration.Value.ToString("s\\.FFF"))); + } + if (SerializedAdditionalRawData?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + if (SerializedAdditionalRawData?.ContainsKey("words") != true && Optional.IsCollectionDefined(Words)) { writer.WritePropertyName("words"u8); writer.WriteStartArray(); @@ -39,7 +51,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (Optional.IsCollectionDefined(Segments)) + if (SerializedAdditionalRawData?.ContainsKey("segments") != true && Optional.IsCollectionDefined(Segments)) { writer.WritePropertyName("segments"u8); writer.WriteStartArray(); @@ -49,10 +61,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -145,8 +161,9 @@ internal static AudioTranscription DeserializeAudioTranscription(JsonElement ele segments = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/AudioTranscription.cs b/src/Generated/Models/AudioTranscription.cs index 98f452965..ce9824521 100644 --- a/src/Generated/Models/AudioTranscription.cs +++ b/src/Generated/Models/AudioTranscription.cs @@ -9,8 +9,7 @@ namespace OpenAI.Audio { public partial class AudioTranscription { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal AudioTranscription(string language, TimeSpan? duration, string text) { Argument.AssertNotNull(language, nameof(language)); @@ -31,7 +30,7 @@ internal AudioTranscription(InternalCreateTranscriptionResponseVerboseJsonTask t Text = text; Words = words; Segments = segments; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal AudioTranscription() diff --git a/src/Generated/Models/AudioTranscriptionOptions.Serialization.cs b/src/Generated/Models/AudioTranscriptionOptions.Serialization.cs index e26134070..726c16fb6 100644 --- a/src/Generated/Models/AudioTranscriptionOptions.Serialization.cs +++ b/src/Generated/Models/AudioTranscriptionOptions.Serialization.cs @@ -22,38 +22,44 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea } writer.WriteStartObject(); - writer.WritePropertyName("file"u8); + if (SerializedAdditionalRawData?.ContainsKey("file") != true) + { + writer.WritePropertyName("file"u8); #if NET6_0_OR_GREATER writer.WriteRawValue(File); #else - using (JsonDocument document = JsonDocument.Parse(File)) + using (JsonDocument document = JsonDocument.Parse(File)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (SerializedAdditionalRawData?.ContainsKey("model") != true) { - JsonSerializer.Serialize(writer, document.RootElement); + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.ToString()); } -#endif - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model.ToString()); - if (Optional.IsDefined(Language)) + if (SerializedAdditionalRawData?.ContainsKey("language") != true && Optional.IsDefined(Language)) { writer.WritePropertyName("language"u8); writer.WriteStringValue(Language); } - if (Optional.IsDefined(Prompt)) + if (SerializedAdditionalRawData?.ContainsKey("prompt") != true && Optional.IsDefined(Prompt)) { writer.WritePropertyName("prompt"u8); writer.WriteStringValue(Prompt); } - if (Optional.IsDefined(ResponseFormat)) + if (SerializedAdditionalRawData?.ContainsKey("response_format") != true && Optional.IsDefined(ResponseFormat)) { writer.WritePropertyName("response_format"u8); writer.WriteStringValue(ResponseFormat.Value.ToSerialString()); } - if (Optional.IsDefined(Temperature)) + if (SerializedAdditionalRawData?.ContainsKey("temperature") != true && Optional.IsDefined(Temperature)) { writer.WritePropertyName("temperature"u8); writer.WriteNumberValue(Temperature.Value); } - if (Optional.IsCollectionDefined(TimestampGranularities)) + if (SerializedAdditionalRawData?.ContainsKey("timestamp_granularities") != true && Optional.IsCollectionDefined(TimestampGranularities)) { writer.WritePropertyName("timestamp_granularities"u8); writer.WriteStartArray(); @@ -75,10 +81,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -183,8 +193,9 @@ internal static AudioTranscriptionOptions DeserializeAudioTranscriptionOptions(J timestampGranularities = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/AudioTranscriptionOptions.cs b/src/Generated/Models/AudioTranscriptionOptions.cs index 2d2184341..3640e680a 100644 --- a/src/Generated/Models/AudioTranscriptionOptions.cs +++ b/src/Generated/Models/AudioTranscriptionOptions.cs @@ -9,7 +9,7 @@ namespace OpenAI.Audio { public partial class AudioTranscriptionOptions { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal AudioTranscriptionOptions(BinaryData file, InternalCreateTranscriptionRequestModel model, string language, string prompt, AudioTranscriptionFormat? responseFormat, float? temperature, IList timestampGranularities, IDictionary serializedAdditionalRawData) { @@ -20,11 +20,11 @@ internal AudioTranscriptionOptions(BinaryData file, InternalCreateTranscriptionR ResponseFormat = responseFormat; Temperature = temperature; TimestampGranularities = timestampGranularities; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public string Language { get; init; } - public string Prompt { get; init; } - public AudioTranscriptionFormat? ResponseFormat { get; init; } - public float? Temperature { get; init; } + public string Language { get; set; } + public string Prompt { get; set; } + public AudioTranscriptionFormat? ResponseFormat { get; set; } + public float? Temperature { get; set; } } } diff --git a/src/Generated/Models/AudioTranslation.Serialization.cs b/src/Generated/Models/AudioTranslation.Serialization.cs index 85212880e..adb60c980 100644 --- a/src/Generated/Models/AudioTranslation.Serialization.cs +++ b/src/Generated/Models/AudioTranslation.Serialization.cs @@ -21,15 +21,27 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter } writer.WriteStartObject(); - writer.WritePropertyName("task"u8); - writer.WriteStringValue(Task.ToString()); - writer.WritePropertyName("language"u8); - writer.WriteStringValue(Language); - writer.WritePropertyName("duration"u8); - writer.WriteNumberValue(Convert.ToDouble(Duration.Value.ToString("s\\.FFF"))); - writer.WritePropertyName("text"u8); - writer.WriteStringValue(Text); - if (Optional.IsCollectionDefined(Segments)) + if (SerializedAdditionalRawData?.ContainsKey("task") != true) + { + writer.WritePropertyName("task"u8); + writer.WriteStringValue(Task.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("language") != true) + { + writer.WritePropertyName("language"u8); + writer.WriteStringValue(Language); + } + if (SerializedAdditionalRawData?.ContainsKey("duration") != true) + { + writer.WritePropertyName("duration"u8); + writer.WriteNumberValue(Convert.ToDouble(Duration.Value.ToString("s\\.FFF"))); + } + if (SerializedAdditionalRawData?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + if (SerializedAdditionalRawData?.ContainsKey("segments") != true && Optional.IsCollectionDefined(Segments)) { writer.WritePropertyName("segments"u8); writer.WriteStartArray(); @@ -39,10 +51,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -120,8 +136,9 @@ internal static AudioTranslation DeserializeAudioTranslation(JsonElement element segments = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/AudioTranslation.cs b/src/Generated/Models/AudioTranslation.cs index 4374b408e..6dfb907ca 100644 --- a/src/Generated/Models/AudioTranslation.cs +++ b/src/Generated/Models/AudioTranslation.cs @@ -9,8 +9,7 @@ namespace OpenAI.Audio { public partial class AudioTranslation { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal AudioTranslation(string language, TimeSpan? duration, string text) { Argument.AssertNotNull(language, nameof(language)); @@ -29,7 +28,7 @@ internal AudioTranslation(InternalCreateTranslationResponseVerboseJsonTask task, Duration = duration; Text = text; Segments = segments; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal AudioTranslation() diff --git a/src/Generated/Models/AudioTranslationOptions.Serialization.cs b/src/Generated/Models/AudioTranslationOptions.Serialization.cs index 215f27d36..1efc834a1 100644 --- a/src/Generated/Models/AudioTranslationOptions.Serialization.cs +++ b/src/Generated/Models/AudioTranslationOptions.Serialization.cs @@ -22,36 +22,46 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade } writer.WriteStartObject(); - writer.WritePropertyName("file"u8); + if (SerializedAdditionalRawData?.ContainsKey("file") != true) + { + writer.WritePropertyName("file"u8); #if NET6_0_OR_GREATER writer.WriteRawValue(File); #else - using (JsonDocument document = JsonDocument.Parse(File)) + using (JsonDocument document = JsonDocument.Parse(File)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (SerializedAdditionalRawData?.ContainsKey("model") != true) { - JsonSerializer.Serialize(writer, document.RootElement); + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.ToString()); } -#endif - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model.ToString()); - if (Optional.IsDefined(Prompt)) + if (SerializedAdditionalRawData?.ContainsKey("prompt") != true && Optional.IsDefined(Prompt)) { writer.WritePropertyName("prompt"u8); writer.WriteStringValue(Prompt); } - if (Optional.IsDefined(ResponseFormat)) + if (SerializedAdditionalRawData?.ContainsKey("response_format") != true && Optional.IsDefined(ResponseFormat)) { writer.WritePropertyName("response_format"u8); writer.WriteStringValue(ResponseFormat.Value.ToSerialString()); } - if (Optional.IsDefined(Temperature)) + if (SerializedAdditionalRawData?.ContainsKey("temperature") != true && Optional.IsDefined(Temperature)) { writer.WritePropertyName("temperature"u8); writer.WriteNumberValue(Temperature.Value); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -128,8 +138,9 @@ internal static AudioTranslationOptions DeserializeAudioTranslationOptions(JsonE temperature = property.Value.GetSingle(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/AudioTranslationOptions.cs b/src/Generated/Models/AudioTranslationOptions.cs index 9307af749..a19d2f1fa 100644 --- a/src/Generated/Models/AudioTranslationOptions.cs +++ b/src/Generated/Models/AudioTranslationOptions.cs @@ -9,7 +9,7 @@ namespace OpenAI.Audio { public partial class AudioTranslationOptions { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal AudioTranslationOptions(BinaryData file, InternalCreateTranslationRequestModel model, string prompt, AudioTranslationFormat? responseFormat, float? temperature, IDictionary serializedAdditionalRawData) { @@ -18,10 +18,10 @@ internal AudioTranslationOptions(BinaryData file, InternalCreateTranslationReque Prompt = prompt; ResponseFormat = responseFormat; Temperature = temperature; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public string Prompt { get; init; } - public AudioTranslationFormat? ResponseFormat { get; init; } - public float? Temperature { get; init; } + public string Prompt { get; set; } + public AudioTranslationFormat? ResponseFormat { get; set; } + public float? Temperature { get; set; } } } diff --git a/src/Generated/Models/ChatCompletion.Serialization.cs b/src/Generated/Models/ChatCompletion.Serialization.cs index 0e31c8ff9..b07410ff8 100644 --- a/src/Generated/Models/ChatCompletion.Serialization.cs +++ b/src/Generated/Models/ChatCompletion.Serialization.cs @@ -21,35 +21,54 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOp } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("choices"u8); - writer.WriteStartArray(); - foreach (var item in Choices) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); } - writer.WriteEndArray(); - writer.WritePropertyName("created"u8); - writer.WriteNumberValue(CreatedAt, "U"); - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model); - if (Optional.IsDefined(SystemFingerprint)) + if (SerializedAdditionalRawData?.ContainsKey("choices") != true) + { + writer.WritePropertyName("choices"u8); + writer.WriteStartArray(); + foreach (var item in Choices) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("created") != true) + { + writer.WritePropertyName("created"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (SerializedAdditionalRawData?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (SerializedAdditionalRawData?.ContainsKey("system_fingerprint") != true && Optional.IsDefined(SystemFingerprint)) { writer.WritePropertyName("system_fingerprint"u8); writer.WriteStringValue(SystemFingerprint); } - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (Optional.IsDefined(Usage)) + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("usage") != true && Optional.IsDefined(Usage)) { writer.WritePropertyName("usage"u8); writer.WriteObjectValue(Usage, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -139,8 +158,9 @@ internal static ChatCompletion DeserializeChatCompletion(JsonElement element, Mo usage = ChatTokenUsage.DeserializeChatTokenUsage(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ChatCompletion.cs b/src/Generated/Models/ChatCompletion.cs index f279528aa..1ad8b44e2 100644 --- a/src/Generated/Models/ChatCompletion.cs +++ b/src/Generated/Models/ChatCompletion.cs @@ -10,8 +10,7 @@ namespace OpenAI.Chat { public partial class ChatCompletion { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal ChatCompletion(string id, IEnumerable choices, DateTimeOffset createdAt, string model) { Argument.AssertNotNull(id, nameof(id)); @@ -33,7 +32,7 @@ internal ChatCompletion(string id, IReadOnlyList.Write(Utf8JsonWriter writer, ModelReaderW } writer.WriteStartObject(); - writer.WritePropertyName("messages"u8); - writer.WriteStartArray(); - foreach (var item in Messages) + if (SerializedAdditionalRawData?.ContainsKey("messages") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("messages"u8); + writer.WriteStartArray(); + foreach (var item in Messages) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); } - writer.WriteEndArray(); - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model.ToString()); - if (Optional.IsDefined(FrequencyPenalty)) + if (SerializedAdditionalRawData?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("frequency_penalty") != true && Optional.IsDefined(FrequencyPenalty)) { if (FrequencyPenalty != null) { @@ -42,7 +48,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("frequency_penalty"); } } - if (Optional.IsCollectionDefined(LogitBiases)) + if (SerializedAdditionalRawData?.ContainsKey("logit_bias") != true && Optional.IsCollectionDefined(LogitBiases)) { if (LogitBiases != null) { @@ -54,7 +60,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("logit_bias"); } } - if (Optional.IsDefined(IncludeLogProbabilities)) + if (SerializedAdditionalRawData?.ContainsKey("logprobs") != true && Optional.IsDefined(IncludeLogProbabilities)) { if (IncludeLogProbabilities != null) { @@ -66,7 +72,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("logprobs"); } } - if (Optional.IsDefined(TopLogProbabilityCount)) + if (SerializedAdditionalRawData?.ContainsKey("top_logprobs") != true && Optional.IsDefined(TopLogProbabilityCount)) { if (TopLogProbabilityCount != null) { @@ -78,7 +84,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("top_logprobs"); } } - if (Optional.IsDefined(MaxTokens)) + if (SerializedAdditionalRawData?.ContainsKey("max_tokens") != true && Optional.IsDefined(MaxTokens)) { if (MaxTokens != null) { @@ -90,7 +96,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("max_tokens"); } } - if (Optional.IsDefined(N)) + if (SerializedAdditionalRawData?.ContainsKey("n") != true && Optional.IsDefined(N)) { if (N != null) { @@ -102,7 +108,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("n"); } } - if (Optional.IsDefined(PresencePenalty)) + if (SerializedAdditionalRawData?.ContainsKey("presence_penalty") != true && Optional.IsDefined(PresencePenalty)) { if (PresencePenalty != null) { @@ -114,12 +120,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("presence_penalty"); } } - if (Optional.IsDefined(ResponseFormat)) + if (SerializedAdditionalRawData?.ContainsKey("response_format") != true && Optional.IsDefined(ResponseFormat)) { writer.WritePropertyName("response_format"u8); writer.WriteObjectValue(ResponseFormat, options); } - if (Optional.IsDefined(Seed)) + if (SerializedAdditionalRawData?.ContainsKey("seed") != true && Optional.IsDefined(Seed)) { if (Seed != null) { @@ -131,7 +137,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("seed"); } } - if (Optional.IsCollectionDefined(StopSequences)) + if (SerializedAdditionalRawData?.ContainsKey("stop") != true && Optional.IsCollectionDefined(StopSequences)) { if (StopSequences != null) { @@ -143,7 +149,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("stop"); } } - if (Optional.IsDefined(Stream)) + if (SerializedAdditionalRawData?.ContainsKey("stream") != true && Optional.IsDefined(Stream)) { if (Stream != null) { @@ -155,7 +161,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("stream"); } } - if (Optional.IsDefined(StreamOptions)) + if (SerializedAdditionalRawData?.ContainsKey("stream_options") != true && Optional.IsDefined(StreamOptions)) { if (StreamOptions != null) { @@ -167,7 +173,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("stream_options"); } } - if (Optional.IsDefined(Temperature)) + if (SerializedAdditionalRawData?.ContainsKey("temperature") != true && Optional.IsDefined(Temperature)) { if (Temperature != null) { @@ -179,7 +185,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("temperature"); } } - if (Optional.IsDefined(TopP)) + if (SerializedAdditionalRawData?.ContainsKey("top_p") != true && Optional.IsDefined(TopP)) { if (TopP != null) { @@ -191,7 +197,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("top_p"); } } - if (Optional.IsCollectionDefined(Tools)) + if (SerializedAdditionalRawData?.ContainsKey("tools") != true && Optional.IsCollectionDefined(Tools)) { writer.WritePropertyName("tools"u8); writer.WriteStartArray(); @@ -201,27 +207,27 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW } writer.WriteEndArray(); } - if (Optional.IsDefined(ToolChoice)) + if (SerializedAdditionalRawData?.ContainsKey("tool_choice") != true && Optional.IsDefined(ToolChoice)) { writer.WritePropertyName("tool_choice"u8); writer.WriteObjectValue(ToolChoice, options); } - if (Optional.IsDefined(ParallelToolCallsEnabled)) + if (SerializedAdditionalRawData?.ContainsKey("parallel_tool_calls") != true && Optional.IsDefined(ParallelToolCallsEnabled)) { writer.WritePropertyName("parallel_tool_calls"u8); writer.WriteBooleanValue(ParallelToolCallsEnabled.Value); } - if (Optional.IsDefined(User)) + if (SerializedAdditionalRawData?.ContainsKey("user") != true && Optional.IsDefined(User)) { writer.WritePropertyName("user"u8); writer.WriteStringValue(User); } - if (Optional.IsDefined(FunctionChoice)) + if (SerializedAdditionalRawData?.ContainsKey("function_call") != true && Optional.IsDefined(FunctionChoice)) { writer.WritePropertyName("function_call"u8); writer.WriteObjectValue(FunctionChoice, options); } - if (Optional.IsCollectionDefined(Functions)) + if (SerializedAdditionalRawData?.ContainsKey("functions") != true && Optional.IsCollectionDefined(Functions)) { writer.WritePropertyName("functions"u8); writer.WriteStartArray(); @@ -231,10 +237,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -499,8 +509,9 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme functions = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ChatCompletionOptions.cs b/src/Generated/Models/ChatCompletionOptions.cs index c4ac90b93..9588a63d4 100644 --- a/src/Generated/Models/ChatCompletionOptions.cs +++ b/src/Generated/Models/ChatCompletionOptions.cs @@ -10,7 +10,7 @@ namespace OpenAI.Chat { public partial class ChatCompletionOptions { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal ChatCompletionOptions(IList messages, InternalCreateChatCompletionRequestModel model, float? frequencyPenalty, IDictionary logitBiases, bool? includeLogProbabilities, int? topLogProbabilityCount, int? maxTokens, int? n, float? presencePenalty, ChatResponseFormat responseFormat, long? seed, IList stopSequences, bool? stream, InternalChatCompletionStreamOptions streamOptions, float? temperature, float? topP, IList tools, ChatToolChoice toolChoice, bool? parallelToolCallsEnabled, string user, ChatFunctionChoice functionChoice, IList functions, IDictionary serializedAdditionalRawData) { @@ -36,17 +36,17 @@ internal ChatCompletionOptions(IList messages, InternalCreateChatCo User = user; FunctionChoice = functionChoice; Functions = functions; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public float? FrequencyPenalty { get; init; } - public int? MaxTokens { get; init; } - public float? PresencePenalty { get; init; } - public ChatResponseFormat ResponseFormat { get; init; } - public long? Seed { get; init; } - public float? Temperature { get; init; } - public float? TopP { get; init; } + public float? FrequencyPenalty { get; set; } + public int? MaxTokens { get; set; } + public float? PresencePenalty { get; set; } + public ChatResponseFormat ResponseFormat { get; set; } + public long? Seed { get; set; } + public float? Temperature { get; set; } + public float? TopP { get; set; } public IList Tools { get; } - public string User { get; init; } + public string User { get; set; } public IList Functions { get; } } } diff --git a/src/Generated/Models/ChatFunction.Serialization.cs b/src/Generated/Models/ChatFunction.Serialization.cs index 628c04f50..c94f62df1 100644 --- a/src/Generated/Models/ChatFunction.Serialization.cs +++ b/src/Generated/Models/ChatFunction.Serialization.cs @@ -21,14 +21,17 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpti } writer.WriteStartObject(); - if (Optional.IsDefined(FunctionDescription)) + if (SerializedAdditionalRawData?.ContainsKey("description") != true && Optional.IsDefined(FunctionDescription)) { writer.WritePropertyName("description"u8); writer.WriteStringValue(FunctionDescription); } - writer.WritePropertyName("name"u8); - writer.WriteStringValue(FunctionName); - if (Optional.IsDefined(FunctionParameters)) + if (SerializedAdditionalRawData?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(FunctionName); + } + if (SerializedAdditionalRawData?.ContainsKey("parameters") != true && Optional.IsDefined(FunctionParameters)) { writer.WritePropertyName("parameters"u8); #if NET6_0_OR_GREATER @@ -40,10 +43,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpti } #endif } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -104,8 +111,9 @@ internal static ChatFunction DeserializeChatFunction(JsonElement element, ModelR parameters = BinaryData.FromString(property.Value.GetRawText()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ChatFunction.cs b/src/Generated/Models/ChatFunction.cs index 926c13031..378eaae81 100644 --- a/src/Generated/Models/ChatFunction.cs +++ b/src/Generated/Models/ChatFunction.cs @@ -10,14 +10,14 @@ namespace OpenAI.Chat [Obsolete("This field is marked as deprecated.")] public partial class ChatFunction { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal ChatFunction(string functionDescription, string functionName, BinaryData functionParameters, IDictionary serializedAdditionalRawData) { FunctionDescription = functionDescription; FunctionName = functionName; FunctionParameters = functionParameters; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal ChatFunction() diff --git a/src/Generated/Models/ChatFunctionCall.Serialization.cs b/src/Generated/Models/ChatFunctionCall.Serialization.cs index 0621c88ab..c04cf6d17 100644 --- a/src/Generated/Models/ChatFunctionCall.Serialization.cs +++ b/src/Generated/Models/ChatFunctionCall.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter } writer.WriteStartObject(); - writer.WritePropertyName("arguments"u8); - writer.WriteStringValue(FunctionArguments); - writer.WritePropertyName("name"u8); - writer.WriteStringValue(FunctionName); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("arguments") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("arguments"u8); + writer.WriteStringValue(FunctionArguments); + } + if (SerializedAdditionalRawData?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(FunctionName); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static ChatFunctionCall DeserializeChatFunctionCall(JsonElement element name = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ChatFunctionCall.cs b/src/Generated/Models/ChatFunctionCall.cs index 6b8bedbab..d10f638aa 100644 --- a/src/Generated/Models/ChatFunctionCall.cs +++ b/src/Generated/Models/ChatFunctionCall.cs @@ -9,13 +9,13 @@ namespace OpenAI.Chat { public partial class ChatFunctionCall { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal ChatFunctionCall(string functionArguments, string functionName, IDictionary serializedAdditionalRawData) { FunctionArguments = functionArguments; FunctionName = functionName; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal ChatFunctionCall() diff --git a/src/Generated/Models/ChatFunctionChoice.cs b/src/Generated/Models/ChatFunctionChoice.cs index 0121466a8..a103d4f41 100644 --- a/src/Generated/Models/ChatFunctionChoice.cs +++ b/src/Generated/Models/ChatFunctionChoice.cs @@ -9,6 +9,6 @@ namespace OpenAI.Chat { public partial class ChatFunctionChoice { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } } } diff --git a/src/Generated/Models/ChatMessage.cs b/src/Generated/Models/ChatMessage.cs index 440751032..7617e8dc4 100644 --- a/src/Generated/Models/ChatMessage.cs +++ b/src/Generated/Models/ChatMessage.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { public abstract partial class ChatMessage { - private protected IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } protected ChatMessage() { Content = new ChangeTrackingList(); @@ -20,9 +19,9 @@ internal ChatMessage(string role, IList content, IDictio { Role = role; Content = content; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - internal string Role { get; init; } + internal string Role { get; set; } } } diff --git a/src/Generated/Models/ChatMessageContentPart.cs b/src/Generated/Models/ChatMessageContentPart.cs index 17d640bcd..ac4ef86e6 100644 --- a/src/Generated/Models/ChatMessageContentPart.cs +++ b/src/Generated/Models/ChatMessageContentPart.cs @@ -9,6 +9,6 @@ namespace OpenAI.Chat { public partial class ChatMessageContentPart { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } } } diff --git a/src/Generated/Models/ChatResponseFormat.Serialization.cs b/src/Generated/Models/ChatResponseFormat.Serialization.cs index 21949133c..1f7449da7 100644 --- a/src/Generated/Models/ChatResponseFormat.Serialization.cs +++ b/src/Generated/Models/ChatResponseFormat.Serialization.cs @@ -21,15 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteStartObject(); - if (Optional.IsDefined(Type)) + if (SerializedAdditionalRawData?.ContainsKey("type") != true && Optional.IsDefined(Type)) { writer.WritePropertyName("type"u8); writer.WriteStringValue(Type.Value.ToString()); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -78,8 +82,9 @@ internal static ChatResponseFormat DeserializeChatResponseFormat(JsonElement ele type = new InternalCreateChatCompletionRequestResponseFormatType(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ChatResponseFormat.cs b/src/Generated/Models/ChatResponseFormat.cs index c9b72ccdb..78f6d60f9 100644 --- a/src/Generated/Models/ChatResponseFormat.cs +++ b/src/Generated/Models/ChatResponseFormat.cs @@ -9,12 +9,12 @@ namespace OpenAI.Chat { public partial class ChatResponseFormat { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal ChatResponseFormat(InternalCreateChatCompletionRequestResponseFormatType? type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } } } diff --git a/src/Generated/Models/ChatTokenLogProbabilityInfo.Serialization.cs b/src/Generated/Models/ChatTokenLogProbabilityInfo.Serialization.cs index 5bb42970c..ff21b6e01 100644 --- a/src/Generated/Models/ChatTokenLogProbabilityInfo.Serialization.cs +++ b/src/Generated/Models/ChatTokenLogProbabilityInfo.Serialization.cs @@ -21,35 +21,51 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR } writer.WriteStartObject(); - writer.WritePropertyName("token"u8); - writer.WriteStringValue(Token); - writer.WritePropertyName("logprob"u8); - writer.WriteNumberValue(LogProbability); - if (Utf8ByteValues != null && Optional.IsCollectionDefined(Utf8ByteValues)) + if (SerializedAdditionalRawData?.ContainsKey("token") != true) { - writer.WritePropertyName("bytes"u8); - writer.WriteStartArray(); - foreach (var item in Utf8ByteValues) - { - writer.WriteNumberValue(item); - } - writer.WriteEndArray(); + writer.WritePropertyName("token"u8); + writer.WriteStringValue(Token); } - else + if (SerializedAdditionalRawData?.ContainsKey("logprob") != true) { - writer.WriteNull("bytes"); + writer.WritePropertyName("logprob"u8); + writer.WriteNumberValue(LogProbability); } - writer.WritePropertyName("top_logprobs"u8); - writer.WriteStartArray(); - foreach (var item in TopLogProbabilities) + if (SerializedAdditionalRawData?.ContainsKey("bytes") != true) { - writer.WriteObjectValue(item, options); + if (Utf8ByteValues != null && Optional.IsCollectionDefined(Utf8ByteValues)) + { + writer.WritePropertyName("bytes"u8); + writer.WriteStartArray(); + foreach (var item in Utf8ByteValues) + { + writer.WriteNumberValue(item); + } + writer.WriteEndArray(); + } + else + { + writer.WriteNull("bytes"); + } } - writer.WriteEndArray(); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("top_logprobs") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("top_logprobs"u8); + writer.WriteStartArray(); + foreach (var item in TopLogProbabilities) { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -127,8 +143,9 @@ internal static ChatTokenLogProbabilityInfo DeserializeChatTokenLogProbabilityIn topLogprobs = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ChatTokenLogProbabilityInfo.cs b/src/Generated/Models/ChatTokenLogProbabilityInfo.cs index ccaa73bf3..857fe0a88 100644 --- a/src/Generated/Models/ChatTokenLogProbabilityInfo.cs +++ b/src/Generated/Models/ChatTokenLogProbabilityInfo.cs @@ -10,8 +10,7 @@ namespace OpenAI.Chat { public partial class ChatTokenLogProbabilityInfo { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal ChatTokenLogProbabilityInfo(string token, float logProbability, IEnumerable utf8ByteValues, IEnumerable topLogProbabilities) { Argument.AssertNotNull(token, nameof(token)); @@ -29,7 +28,7 @@ internal ChatTokenLogProbabilityInfo(string token, float logProbability, IReadOn LogProbability = logProbability; Utf8ByteValues = utf8ByteValues; TopLogProbabilities = topLogProbabilities; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal ChatTokenLogProbabilityInfo() diff --git a/src/Generated/Models/ChatTokenTopLogProbabilityInfo.Serialization.cs b/src/Generated/Models/ChatTokenTopLogProbabilityInfo.Serialization.cs index 5f72617ec..e070bfd93 100644 --- a/src/Generated/Models/ChatTokenTopLogProbabilityInfo.Serialization.cs +++ b/src/Generated/Models/ChatTokenTopLogProbabilityInfo.Serialization.cs @@ -21,28 +21,41 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod } writer.WriteStartObject(); - writer.WritePropertyName("token"u8); - writer.WriteStringValue(Token); - writer.WritePropertyName("logprob"u8); - writer.WriteNumberValue(LogProbability); - if (Utf8ByteValues != null && Optional.IsCollectionDefined(Utf8ByteValues)) + if (SerializedAdditionalRawData?.ContainsKey("token") != true) { - writer.WritePropertyName("bytes"u8); - writer.WriteStartArray(); - foreach (var item in Utf8ByteValues) - { - writer.WriteNumberValue(item); - } - writer.WriteEndArray(); + writer.WritePropertyName("token"u8); + writer.WriteStringValue(Token); } - else + if (SerializedAdditionalRawData?.ContainsKey("logprob") != true) { - writer.WriteNull("bytes"); + writer.WritePropertyName("logprob"u8); + writer.WriteNumberValue(LogProbability); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("bytes") != true) { - foreach (var item in _serializedAdditionalRawData) + if (Utf8ByteValues != null && Optional.IsCollectionDefined(Utf8ByteValues)) { + writer.WritePropertyName("bytes"u8); + writer.WriteStartArray(); + foreach (var item in Utf8ByteValues) + { + writer.WriteNumberValue(item); + } + writer.WriteEndArray(); + } + else + { + writer.WriteNull("bytes"); + } + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -109,8 +122,9 @@ internal static ChatTokenTopLogProbabilityInfo DeserializeChatTokenTopLogProbabi bytes = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ChatTokenTopLogProbabilityInfo.cs b/src/Generated/Models/ChatTokenTopLogProbabilityInfo.cs index 5a3dc2b52..f0ee70ff5 100644 --- a/src/Generated/Models/ChatTokenTopLogProbabilityInfo.cs +++ b/src/Generated/Models/ChatTokenTopLogProbabilityInfo.cs @@ -10,8 +10,7 @@ namespace OpenAI.Chat { public partial class ChatTokenTopLogProbabilityInfo { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal ChatTokenTopLogProbabilityInfo(string token, float logProbability, IEnumerable utf8ByteValues) { Argument.AssertNotNull(token, nameof(token)); @@ -26,7 +25,7 @@ internal ChatTokenTopLogProbabilityInfo(string token, float logProbability, IRea Token = token; LogProbability = logProbability; Utf8ByteValues = utf8ByteValues; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal ChatTokenTopLogProbabilityInfo() diff --git a/src/Generated/Models/ChatTokenUsage.Serialization.cs b/src/Generated/Models/ChatTokenUsage.Serialization.cs index c28619920..7fdb944f0 100644 --- a/src/Generated/Models/ChatTokenUsage.Serialization.cs +++ b/src/Generated/Models/ChatTokenUsage.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOp } writer.WriteStartObject(); - writer.WritePropertyName("completion_tokens"u8); - writer.WriteNumberValue(OutputTokens); - writer.WritePropertyName("prompt_tokens"u8); - writer.WriteNumberValue(InputTokens); - writer.WritePropertyName("total_tokens"u8); - writer.WriteNumberValue(TotalTokens); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("completion_tokens") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("completion_tokens"u8); + writer.WriteNumberValue(OutputTokens); + } + if (SerializedAdditionalRawData?.ContainsKey("prompt_tokens") != true) + { + writer.WritePropertyName("prompt_tokens"u8); + writer.WriteNumberValue(InputTokens); + } + if (SerializedAdditionalRawData?.ContainsKey("total_tokens") != true) + { + writer.WritePropertyName("total_tokens"u8); + writer.WriteNumberValue(TotalTokens); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static ChatTokenUsage DeserializeChatTokenUsage(JsonElement element, Mo totalTokens = property.Value.GetInt32(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ChatTokenUsage.cs b/src/Generated/Models/ChatTokenUsage.cs index 2977134d7..3c2507780 100644 --- a/src/Generated/Models/ChatTokenUsage.cs +++ b/src/Generated/Models/ChatTokenUsage.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { public partial class ChatTokenUsage { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal ChatTokenUsage(int outputTokens, int inputTokens, int totalTokens) { OutputTokens = outputTokens; @@ -23,7 +22,7 @@ internal ChatTokenUsage(int outputTokens, int inputTokens, int totalTokens, IDic OutputTokens = outputTokens; InputTokens = inputTokens; TotalTokens = totalTokens; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal ChatTokenUsage() diff --git a/src/Generated/Models/ChatTool.Serialization.cs b/src/Generated/Models/ChatTool.Serialization.cs index 85bd29311..382fe5c93 100644 --- a/src/Generated/Models/ChatTool.Serialization.cs +++ b/src/Generated/Models/ChatTool.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Kind.ToString()); - writer.WritePropertyName("function"u8); - writer.WriteObjectValue(Function, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("function") != true) + { + writer.WritePropertyName("function"u8); + writer.WriteObjectValue(Function, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static ChatTool DeserializeChatTool(JsonElement element, ModelReaderWri function = InternalFunctionDefinition.DeserializeInternalFunctionDefinition(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ChatTool.cs b/src/Generated/Models/ChatTool.cs index b7a1c0c9c..d10b8bc5f 100644 --- a/src/Generated/Models/ChatTool.cs +++ b/src/Generated/Models/ChatTool.cs @@ -9,13 +9,13 @@ namespace OpenAI.Chat { public partial class ChatTool { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal ChatTool(ChatToolKind kind, InternalFunctionDefinition function, IDictionary serializedAdditionalRawData) { Kind = kind; Function = function; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal ChatTool() diff --git a/src/Generated/Models/ChatToolCall.Serialization.cs b/src/Generated/Models/ChatToolCall.Serialization.cs index ca4ccca13..09be7a3fd 100644 --- a/src/Generated/Models/ChatToolCall.Serialization.cs +++ b/src/Generated/Models/ChatToolCall.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpti } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Kind.ToString()); - writer.WritePropertyName("function"u8); - writer.WriteObjectValue(Function, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("function") != true) + { + writer.WritePropertyName("function"u8); + writer.WriteObjectValue(Function, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static ChatToolCall DeserializeChatToolCall(JsonElement element, ModelR function = InternalChatCompletionMessageToolCallFunction.DeserializeInternalChatCompletionMessageToolCallFunction(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ChatToolCall.cs b/src/Generated/Models/ChatToolCall.cs index 5f3419a8f..0d909e905 100644 --- a/src/Generated/Models/ChatToolCall.cs +++ b/src/Generated/Models/ChatToolCall.cs @@ -9,20 +9,20 @@ namespace OpenAI.Chat { public partial class ChatToolCall { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal ChatToolCall(string id, ChatToolCallKind kind, InternalChatCompletionMessageToolCallFunction function, IDictionary serializedAdditionalRawData) { Id = id; Kind = kind; Function = function; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal ChatToolCall() { } - public string Id { get; init; } + public string Id { get; set; } } } diff --git a/src/Generated/Models/ChatToolChoice.cs b/src/Generated/Models/ChatToolChoice.cs index 96a88653b..5650611aa 100644 --- a/src/Generated/Models/ChatToolChoice.cs +++ b/src/Generated/Models/ChatToolChoice.cs @@ -9,6 +9,6 @@ namespace OpenAI.Chat { public partial class ChatToolChoice { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } } } diff --git a/src/Generated/Models/CodeInterpreterToolDefinition.Serialization.cs b/src/Generated/Models/CodeInterpreterToolDefinition.Serialization.cs index 185798328..c4944d3b1 100644 --- a/src/Generated/Models/CodeInterpreterToolDefinition.Serialization.cs +++ b/src/Generated/Models/CodeInterpreterToolDefinition.Serialization.cs @@ -42,8 +42,9 @@ internal static CodeInterpreterToolDefinition DeserializeCodeInterpreterToolDefi type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/CodeInterpreterToolResources.Serialization.cs b/src/Generated/Models/CodeInterpreterToolResources.Serialization.cs index e6a59a8d8..a1cc1f9cb 100644 --- a/src/Generated/Models/CodeInterpreterToolResources.Serialization.cs +++ b/src/Generated/Models/CodeInterpreterToolResources.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(FileIds)) + if (SerializedAdditionalRawData?.ContainsKey("file_ids") != true && Optional.IsCollectionDefined(FileIds)) { writer.WritePropertyName("file_ids"u8); writer.WriteStartArray(); @@ -31,10 +31,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -88,8 +92,9 @@ internal static CodeInterpreterToolResources DeserializeCodeInterpreterToolResou fileIds = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/CodeInterpreterToolResources.cs b/src/Generated/Models/CodeInterpreterToolResources.cs index e6f5624c6..1735ff0f9 100644 --- a/src/Generated/Models/CodeInterpreterToolResources.cs +++ b/src/Generated/Models/CodeInterpreterToolResources.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { public partial class CodeInterpreterToolResources { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal CodeInterpreterToolResources(IList fileIds, IDictionary serializedAdditionalRawData) { FileIds = fileIds; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } } } diff --git a/src/Generated/Models/Embedding.Serialization.cs b/src/Generated/Models/Embedding.Serialization.cs index 2d9c3694e..d46185eb7 100644 --- a/src/Generated/Models/Embedding.Serialization.cs +++ b/src/Generated/Models/Embedding.Serialization.cs @@ -21,23 +21,36 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions } writer.WriteStartObject(); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - writer.WritePropertyName("embedding"u8); + if (SerializedAdditionalRawData?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + if (SerializedAdditionalRawData?.ContainsKey("embedding") != true) + { + writer.WritePropertyName("embedding"u8); #if NET6_0_OR_GREATER writer.WriteRawValue(EmbeddingProperty); #else - using (JsonDocument document = JsonDocument.Parse(EmbeddingProperty)) + using (JsonDocument document = JsonDocument.Parse(EmbeddingProperty)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - JsonSerializer.Serialize(writer, document.RootElement); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } -#endif - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -94,8 +107,9 @@ internal static Embedding DeserializeEmbedding(JsonElement element, ModelReaderW @object = new InternalEmbeddingObject(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/Embedding.cs b/src/Generated/Models/Embedding.cs index 5dffb1ed6..b8eb10978 100644 --- a/src/Generated/Models/Embedding.cs +++ b/src/Generated/Models/Embedding.cs @@ -9,7 +9,7 @@ namespace OpenAI.Embeddings { public partial class Embedding { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal Embedding() { diff --git a/src/Generated/Models/EmbeddingGenerationOptions.Serialization.cs b/src/Generated/Models/EmbeddingGenerationOptions.Serialization.cs index 37c75c0e7..ef5571de1 100644 --- a/src/Generated/Models/EmbeddingGenerationOptions.Serialization.cs +++ b/src/Generated/Models/EmbeddingGenerationOptions.Serialization.cs @@ -21,36 +21,46 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } writer.WriteStartObject(); - writer.WritePropertyName("input"u8); + if (SerializedAdditionalRawData?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); #if NET6_0_OR_GREATER writer.WriteRawValue(Input); #else - using (JsonDocument document = JsonDocument.Parse(Input)) + using (JsonDocument document = JsonDocument.Parse(Input)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (SerializedAdditionalRawData?.ContainsKey("model") != true) { - JsonSerializer.Serialize(writer, document.RootElement); + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.ToString()); } -#endif - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model.ToString()); - if (Optional.IsDefined(EncodingFormat)) + if (SerializedAdditionalRawData?.ContainsKey("encoding_format") != true && Optional.IsDefined(EncodingFormat)) { writer.WritePropertyName("encoding_format"u8); writer.WriteStringValue(EncodingFormat.Value.ToString()); } - if (Optional.IsDefined(Dimensions)) + if (SerializedAdditionalRawData?.ContainsKey("dimensions") != true && Optional.IsDefined(Dimensions)) { writer.WritePropertyName("dimensions"u8); writer.WriteNumberValue(Dimensions.Value); } - if (Optional.IsDefined(User)) + if (SerializedAdditionalRawData?.ContainsKey("user") != true && Optional.IsDefined(User)) { writer.WritePropertyName("user"u8); writer.WriteStringValue(User); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -127,8 +137,9 @@ internal static EmbeddingGenerationOptions DeserializeEmbeddingGenerationOptions user = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/EmbeddingGenerationOptions.cs b/src/Generated/Models/EmbeddingGenerationOptions.cs index 0b2afe9a8..b9845d838 100644 --- a/src/Generated/Models/EmbeddingGenerationOptions.cs +++ b/src/Generated/Models/EmbeddingGenerationOptions.cs @@ -9,7 +9,7 @@ namespace OpenAI.Embeddings { public partial class EmbeddingGenerationOptions { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal EmbeddingGenerationOptions(BinaryData input, InternalCreateEmbeddingRequestModel model, InternalCreateEmbeddingRequestEncodingFormat? encodingFormat, int? dimensions, string user, IDictionary serializedAdditionalRawData) { @@ -18,9 +18,9 @@ internal EmbeddingGenerationOptions(BinaryData input, InternalCreateEmbeddingReq EncodingFormat = encodingFormat; Dimensions = dimensions; User = user; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public int? Dimensions { get; init; } - public string User { get; init; } + public int? Dimensions { get; set; } + public string User { get; set; } } } diff --git a/src/Generated/Models/EmbeddingTokenUsage.Serialization.cs b/src/Generated/Models/EmbeddingTokenUsage.Serialization.cs index 739eb4b1e..44652bfae 100644 --- a/src/Generated/Models/EmbeddingTokenUsage.Serialization.cs +++ b/src/Generated/Models/EmbeddingTokenUsage.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWri } writer.WriteStartObject(); - writer.WritePropertyName("prompt_tokens"u8); - writer.WriteNumberValue(InputTokens); - writer.WritePropertyName("total_tokens"u8); - writer.WriteNumberValue(TotalTokens); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("prompt_tokens") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("prompt_tokens"u8); + writer.WriteNumberValue(InputTokens); + } + if (SerializedAdditionalRawData?.ContainsKey("total_tokens") != true) + { + writer.WritePropertyName("total_tokens"u8); + writer.WriteNumberValue(TotalTokens); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static EmbeddingTokenUsage DeserializeEmbeddingTokenUsage(JsonElement e totalTokens = property.Value.GetInt32(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/EmbeddingTokenUsage.cs b/src/Generated/Models/EmbeddingTokenUsage.cs index 2dff5a9cf..5234ccde5 100644 --- a/src/Generated/Models/EmbeddingTokenUsage.cs +++ b/src/Generated/Models/EmbeddingTokenUsage.cs @@ -9,8 +9,7 @@ namespace OpenAI.Embeddings { public partial class EmbeddingTokenUsage { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal EmbeddingTokenUsage(int inputTokens, int totalTokens) { InputTokens = inputTokens; @@ -21,7 +20,7 @@ internal EmbeddingTokenUsage(int inputTokens, int totalTokens, IDictionary.Write(Utf8JsonWriter writer, ModelReaderWr } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); diff --git a/src/Generated/Models/FileChunkingStrategy.cs b/src/Generated/Models/FileChunkingStrategy.cs index 60538187f..b93a33e99 100644 --- a/src/Generated/Models/FileChunkingStrategy.cs +++ b/src/Generated/Models/FileChunkingStrategy.cs @@ -9,8 +9,7 @@ namespace OpenAI.VectorStores { public abstract partial class FileChunkingStrategy { - private protected IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } protected FileChunkingStrategy() { } @@ -18,9 +17,9 @@ protected FileChunkingStrategy() internal FileChunkingStrategy(string type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - internal string Type { get; init; } + internal string Type { get; set; } } } diff --git a/src/Generated/Models/FileSearchToolDefinition.Serialization.cs b/src/Generated/Models/FileSearchToolDefinition.Serialization.cs index 7adf16913..928639cbf 100644 --- a/src/Generated/Models/FileSearchToolDefinition.Serialization.cs +++ b/src/Generated/Models/FileSearchToolDefinition.Serialization.cs @@ -52,8 +52,9 @@ internal static FileSearchToolDefinition DeserializeFileSearchToolDefinition(Jso type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/FileSearchToolResources.Serialization.cs b/src/Generated/Models/FileSearchToolResources.Serialization.cs index ab1632384..ec8fe8292 100644 --- a/src/Generated/Models/FileSearchToolResources.Serialization.cs +++ b/src/Generated/Models/FileSearchToolResources.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(VectorStoreIds)) + if (SerializedAdditionalRawData?.ContainsKey("vector_store_ids") != true && Optional.IsCollectionDefined(VectorStoreIds)) { writer.WritePropertyName("vector_store_ids"u8); writer.WriteStartArray(); @@ -31,15 +31,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade } writer.WriteEndArray(); } - if (true && Optional.IsCollectionDefined(NewVectorStores)) + if (SerializedAdditionalRawData?.ContainsKey("vector_stores") != true && Optional.IsCollectionDefined(NewVectorStores)) { writer.WritePropertyName("vector_stores"u8); SerializeNewVectorStores(writer, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -108,8 +112,9 @@ internal static FileSearchToolResources DeserializeFileSearchToolResources(JsonE vectorStores = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/FileSearchToolResources.cs b/src/Generated/Models/FileSearchToolResources.cs index 69fd6b639..21ddbd788 100644 --- a/src/Generated/Models/FileSearchToolResources.cs +++ b/src/Generated/Models/FileSearchToolResources.cs @@ -9,13 +9,13 @@ namespace OpenAI.Assistants { public partial class FileSearchToolResources { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal FileSearchToolResources(IList vectorStoreIds, IList newVectorStores, IDictionary serializedAdditionalRawData) { VectorStoreIds = vectorStoreIds; NewVectorStores = newVectorStores; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } } } diff --git a/src/Generated/Models/FunctionToolDefinition.Serialization.cs b/src/Generated/Models/FunctionToolDefinition.Serialization.cs index 4c7ea47dd..1509eb7ca 100644 --- a/src/Generated/Models/FunctionToolDefinition.Serialization.cs +++ b/src/Generated/Models/FunctionToolDefinition.Serialization.cs @@ -48,8 +48,9 @@ internal static FunctionToolDefinition DeserializeFunctionToolDefinition(JsonEle type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/GeneratedImage.Serialization.cs b/src/Generated/Models/GeneratedImage.Serialization.cs index 3a89f3081..1d906252b 100644 --- a/src/Generated/Models/GeneratedImage.Serialization.cs +++ b/src/Generated/Models/GeneratedImage.Serialization.cs @@ -21,25 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOp } writer.WriteStartObject(); - if (Optional.IsDefined(ImageBytes)) + if (SerializedAdditionalRawData?.ContainsKey("b64_json") != true && Optional.IsDefined(ImageBytes)) { writer.WritePropertyName("b64_json"u8); writer.WriteBase64StringValue(ImageBytes.ToArray(), "D"); } - if (Optional.IsDefined(ImageUri)) + if (SerializedAdditionalRawData?.ContainsKey("url") != true && Optional.IsDefined(ImageUri)) { writer.WritePropertyName("url"u8); writer.WriteStringValue(ImageUri.AbsoluteUri); } - if (Optional.IsDefined(RevisedPrompt)) + if (SerializedAdditionalRawData?.ContainsKey("revised_prompt") != true && Optional.IsDefined(RevisedPrompt)) { writer.WritePropertyName("revised_prompt"u8); writer.WriteStringValue(RevisedPrompt); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -104,8 +108,9 @@ internal static GeneratedImage DeserializeGeneratedImage(JsonElement element, Mo revisedPrompt = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/GeneratedImage.cs b/src/Generated/Models/GeneratedImage.cs index 45f344b54..9177bfc96 100644 --- a/src/Generated/Models/GeneratedImage.cs +++ b/src/Generated/Models/GeneratedImage.cs @@ -9,8 +9,7 @@ namespace OpenAI.Images { public partial class GeneratedImage { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal GeneratedImage() { } @@ -20,7 +19,7 @@ internal GeneratedImage(BinaryData imageBytes, Uri imageUri, string revisedPromp ImageBytes = imageBytes; ImageUri = imageUri; RevisedPrompt = revisedPrompt; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public string RevisedPrompt { get; } } diff --git a/src/Generated/Models/ImageEditOptions.Serialization.cs b/src/Generated/Models/ImageEditOptions.Serialization.cs index e7bf6472b..2216f87dc 100644 --- a/src/Generated/Models/ImageEditOptions.Serialization.cs +++ b/src/Generated/Models/ImageEditOptions.Serialization.cs @@ -22,18 +22,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter } writer.WriteStartObject(); - writer.WritePropertyName("image"u8); + if (SerializedAdditionalRawData?.ContainsKey("image") != true) + { + writer.WritePropertyName("image"u8); #if NET6_0_OR_GREATER writer.WriteRawValue(Image); #else - using (JsonDocument document = JsonDocument.Parse(Image)) + using (JsonDocument document = JsonDocument.Parse(Image)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (SerializedAdditionalRawData?.ContainsKey("prompt") != true) { - JsonSerializer.Serialize(writer, document.RootElement); + writer.WritePropertyName("prompt"u8); + writer.WriteStringValue(Prompt); } -#endif - writer.WritePropertyName("prompt"u8); - writer.WriteStringValue(Prompt); - if (Optional.IsDefined(Mask)) + if (SerializedAdditionalRawData?.ContainsKey("mask") != true && Optional.IsDefined(Mask)) { writer.WritePropertyName("mask"u8); #if NET6_0_OR_GREATER @@ -45,7 +51,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter } #endif } - if (Optional.IsDefined(Model)) + if (SerializedAdditionalRawData?.ContainsKey("model") != true && Optional.IsDefined(Model)) { if (Model != null) { @@ -57,7 +63,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter writer.WriteNull("model"); } } - if (Optional.IsDefined(N)) + if (SerializedAdditionalRawData?.ContainsKey("n") != true && Optional.IsDefined(N)) { if (N != null) { @@ -69,7 +75,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter writer.WriteNull("n"); } } - if (Optional.IsDefined(Size)) + if (SerializedAdditionalRawData?.ContainsKey("size") != true && Optional.IsDefined(Size)) { if (Size != null) { @@ -81,7 +87,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter writer.WriteNull("size"); } } - if (Optional.IsDefined(ResponseFormat)) + if (SerializedAdditionalRawData?.ContainsKey("response_format") != true && Optional.IsDefined(ResponseFormat)) { if (ResponseFormat != null) { @@ -93,15 +99,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter writer.WriteNull("response_format"); } } - if (Optional.IsDefined(User)) + if (SerializedAdditionalRawData?.ContainsKey("user") != true && Optional.IsDefined(User)) { writer.WritePropertyName("user"u8); writer.WriteStringValue(User); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -212,8 +222,9 @@ internal static ImageEditOptions DeserializeImageEditOptions(JsonElement element user = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ImageEditOptions.cs b/src/Generated/Models/ImageEditOptions.cs index 71f2a2933..bae4472ef 100644 --- a/src/Generated/Models/ImageEditOptions.cs +++ b/src/Generated/Models/ImageEditOptions.cs @@ -9,7 +9,7 @@ namespace OpenAI.Images { public partial class ImageEditOptions { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal ImageEditOptions(BinaryData image, string prompt, BinaryData mask, InternalCreateImageEditRequestModel? model, long? n, GeneratedImageSize? size, GeneratedImageFormat? responseFormat, string user, IDictionary serializedAdditionalRawData) { @@ -21,8 +21,8 @@ internal ImageEditOptions(BinaryData image, string prompt, BinaryData mask, Inte Size = size; ResponseFormat = responseFormat; User = user; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public string User { get; init; } + public string User { get; set; } } } diff --git a/src/Generated/Models/ImageGenerationOptions.Serialization.cs b/src/Generated/Models/ImageGenerationOptions.Serialization.cs index b3d5ce7c9..60d14b4e3 100644 --- a/src/Generated/Models/ImageGenerationOptions.Serialization.cs +++ b/src/Generated/Models/ImageGenerationOptions.Serialization.cs @@ -21,9 +21,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader } writer.WriteStartObject(); - writer.WritePropertyName("prompt"u8); - writer.WriteStringValue(Prompt); - if (Optional.IsDefined(Model)) + if (SerializedAdditionalRawData?.ContainsKey("prompt") != true) + { + writer.WritePropertyName("prompt"u8); + writer.WriteStringValue(Prompt); + } + if (SerializedAdditionalRawData?.ContainsKey("model") != true && Optional.IsDefined(Model)) { if (Model != null) { @@ -35,7 +38,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteNull("model"); } } - if (Optional.IsDefined(N)) + if (SerializedAdditionalRawData?.ContainsKey("n") != true && Optional.IsDefined(N)) { if (N != null) { @@ -47,12 +50,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteNull("n"); } } - if (Optional.IsDefined(Quality)) + if (SerializedAdditionalRawData?.ContainsKey("quality") != true && Optional.IsDefined(Quality)) { writer.WritePropertyName("quality"u8); writer.WriteStringValue(Quality.Value.ToSerialString()); } - if (Optional.IsDefined(ResponseFormat)) + if (SerializedAdditionalRawData?.ContainsKey("response_format") != true && Optional.IsDefined(ResponseFormat)) { if (ResponseFormat != null) { @@ -64,7 +67,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteNull("response_format"); } } - if (Optional.IsDefined(Size)) + if (SerializedAdditionalRawData?.ContainsKey("size") != true && Optional.IsDefined(Size)) { if (Size != null) { @@ -76,7 +79,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteNull("size"); } } - if (Optional.IsDefined(Style)) + if (SerializedAdditionalRawData?.ContainsKey("style") != true && Optional.IsDefined(Style)) { if (Style != null) { @@ -88,15 +91,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteNull("style"); } } - if (Optional.IsDefined(User)) + if (SerializedAdditionalRawData?.ContainsKey("user") != true && Optional.IsDefined(User)) { writer.WritePropertyName("user"u8); writer.WriteStringValue(User); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -212,8 +219,9 @@ internal static ImageGenerationOptions DeserializeImageGenerationOptions(JsonEle user = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ImageGenerationOptions.cs b/src/Generated/Models/ImageGenerationOptions.cs index 9fdec26c2..e5f92429f 100644 --- a/src/Generated/Models/ImageGenerationOptions.cs +++ b/src/Generated/Models/ImageGenerationOptions.cs @@ -9,7 +9,7 @@ namespace OpenAI.Images { public partial class ImageGenerationOptions { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal ImageGenerationOptions(string prompt, InternalCreateImageRequestModel? model, long? n, GeneratedImageQuality? quality, GeneratedImageFormat? responseFormat, GeneratedImageSize? size, GeneratedImageStyle? style, string user, IDictionary serializedAdditionalRawData) { @@ -21,12 +21,12 @@ internal ImageGenerationOptions(string prompt, InternalCreateImageRequestModel? Size = size; Style = style; User = user; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public GeneratedImageQuality? Quality { get; init; } - public GeneratedImageFormat? ResponseFormat { get; init; } - public GeneratedImageSize? Size { get; init; } - public GeneratedImageStyle? Style { get; init; } - public string User { get; init; } + public GeneratedImageQuality? Quality { get; set; } + public GeneratedImageFormat? ResponseFormat { get; set; } + public GeneratedImageSize? Size { get; set; } + public GeneratedImageStyle? Style { get; set; } + public string User { get; set; } } } diff --git a/src/Generated/Models/ImageVariationOptions.Serialization.cs b/src/Generated/Models/ImageVariationOptions.Serialization.cs index 1c3888db9..f08b54dde 100644 --- a/src/Generated/Models/ImageVariationOptions.Serialization.cs +++ b/src/Generated/Models/ImageVariationOptions.Serialization.cs @@ -22,16 +22,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW } writer.WriteStartObject(); - writer.WritePropertyName("image"u8); + if (SerializedAdditionalRawData?.ContainsKey("image") != true) + { + writer.WritePropertyName("image"u8); #if NET6_0_OR_GREATER writer.WriteRawValue(Image); #else - using (JsonDocument document = JsonDocument.Parse(Image)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } + using (JsonDocument document = JsonDocument.Parse(Image)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } #endif - if (Optional.IsDefined(Model)) + } + if (SerializedAdditionalRawData?.ContainsKey("model") != true && Optional.IsDefined(Model)) { if (Model != null) { @@ -43,7 +46,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("model"); } } - if (Optional.IsDefined(N)) + if (SerializedAdditionalRawData?.ContainsKey("n") != true && Optional.IsDefined(N)) { if (N != null) { @@ -55,7 +58,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("n"); } } - if (Optional.IsDefined(ResponseFormat)) + if (SerializedAdditionalRawData?.ContainsKey("response_format") != true && Optional.IsDefined(ResponseFormat)) { if (ResponseFormat != null) { @@ -67,7 +70,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("response_format"); } } - if (Optional.IsDefined(Size)) + if (SerializedAdditionalRawData?.ContainsKey("size") != true && Optional.IsDefined(Size)) { if (Size != null) { @@ -79,15 +82,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("size"); } } - if (Optional.IsDefined(User)) + if (SerializedAdditionalRawData?.ContainsKey("user") != true && Optional.IsDefined(User)) { writer.WritePropertyName("user"u8); writer.WriteStringValue(User); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -182,8 +189,9 @@ internal static ImageVariationOptions DeserializeImageVariationOptions(JsonEleme user = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ImageVariationOptions.cs b/src/Generated/Models/ImageVariationOptions.cs index 35ebbc6a1..d4b9a8cf2 100644 --- a/src/Generated/Models/ImageVariationOptions.cs +++ b/src/Generated/Models/ImageVariationOptions.cs @@ -9,7 +9,7 @@ namespace OpenAI.Images { public partial class ImageVariationOptions { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal ImageVariationOptions(BinaryData image, InternalCreateImageVariationRequestModel? model, long? n, GeneratedImageFormat? responseFormat, GeneratedImageSize? size, string user, IDictionary serializedAdditionalRawData) { @@ -19,8 +19,8 @@ internal ImageVariationOptions(BinaryData image, InternalCreateImageVariationReq ResponseFormat = responseFormat; Size = size; User = user; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public string User { get; init; } + public string User { get; set; } } } diff --git a/src/Generated/Models/InternalAssistantToolsFileSearchFileSearch.Serialization.cs b/src/Generated/Models/InternalAssistantToolsFileSearchFileSearch.Serialization.cs index 3d285d4aa..26881bc3f 100644 --- a/src/Generated/Models/InternalAssistantToolsFileSearchFileSearch.Serialization.cs +++ b/src/Generated/Models/InternalAssistantToolsFileSearchFileSearch.Serialization.cs @@ -21,15 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter } writer.WriteStartObject(); - if (Optional.IsDefined(InternalMaxNumResults)) + if (SerializedAdditionalRawData?.ContainsKey("max_num_results") != true && Optional.IsDefined(InternalMaxNumResults)) { writer.WritePropertyName("max_num_results"u8); writer.WriteNumberValue(InternalMaxNumResults.Value); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -78,8 +82,9 @@ internal static InternalAssistantToolsFileSearchFileSearch DeserializeInternalAs maxNumResults = property.Value.GetInt32(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalAssistantToolsFileSearchFileSearch.cs b/src/Generated/Models/InternalAssistantToolsFileSearchFileSearch.cs index 1d922c770..b65ac169e 100644 --- a/src/Generated/Models/InternalAssistantToolsFileSearchFileSearch.cs +++ b/src/Generated/Models/InternalAssistantToolsFileSearchFileSearch.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalAssistantToolsFileSearchFileSearch { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalAssistantToolsFileSearchFileSearch() { } @@ -18,7 +17,7 @@ public InternalAssistantToolsFileSearchFileSearch() internal InternalAssistantToolsFileSearchFileSearch(int? internalMaxNumResults, IDictionary serializedAdditionalRawData) { InternalMaxNumResults = internalMaxNumResults; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } } } diff --git a/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.Serialization.cs b/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.Serialization.cs index 7e1084aba..882893ecf 100644 --- a/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.Serialization.cs +++ b/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter w } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type.ToString()); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static InternalAssistantToolsFileSearchTypeOnly DeserializeInternalAssi type = new InternalAssistantToolsFileSearchTypeOnlyType(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.cs b/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.cs index c23b48b6c..607f7fb44 100644 --- a/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.cs +++ b/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalAssistantToolsFileSearchTypeOnly { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalAssistantToolsFileSearchTypeOnly() { } @@ -18,7 +17,7 @@ public InternalAssistantToolsFileSearchTypeOnly() internal InternalAssistantToolsFileSearchTypeOnly(InternalAssistantToolsFileSearchTypeOnlyType type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public InternalAssistantToolsFileSearchTypeOnlyType Type { get; } = InternalAssistantToolsFileSearchTypeOnlyType.FileSearch; diff --git a/src/Generated/Models/InternalAssistantsApiResponseFormat.Serialization.cs b/src/Generated/Models/InternalAssistantsApiResponseFormat.Serialization.cs index 97b3e54a1..c3ec44702 100644 --- a/src/Generated/Models/InternalAssistantsApiResponseFormat.Serialization.cs +++ b/src/Generated/Models/InternalAssistantsApiResponseFormat.Serialization.cs @@ -21,15 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer } writer.WriteStartObject(); - if (Optional.IsDefined(Type)) + if (SerializedAdditionalRawData?.ContainsKey("type") != true && Optional.IsDefined(Type)) { writer.WritePropertyName("type"u8); writer.WriteStringValue(Type.Value.ToString()); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -78,8 +82,9 @@ internal static InternalAssistantsApiResponseFormat DeserializeInternalAssistant type = new InternalAssistantsApiResponseFormatType(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalAssistantsApiResponseFormat.cs b/src/Generated/Models/InternalAssistantsApiResponseFormat.cs index 55a4102ed..9333fb55c 100644 --- a/src/Generated/Models/InternalAssistantsApiResponseFormat.cs +++ b/src/Generated/Models/InternalAssistantsApiResponseFormat.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalAssistantsApiResponseFormat { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalAssistantsApiResponseFormat() { } @@ -18,7 +17,7 @@ public InternalAssistantsApiResponseFormat() internal InternalAssistantsApiResponseFormat(InternalAssistantsApiResponseFormatType? type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public InternalAssistantsApiResponseFormatType? Type { get; set; } diff --git a/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.Serialization.cs b/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.Serialization.cs index f9f5f9539..09f0a21c9 100644 --- a/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.Serialization.cs +++ b/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter } writer.WriteStartObject(); - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("name") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static InternalAssistantsNamedToolChoiceFunction DeserializeInternalAss name = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.cs b/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.cs index c43e00667..88e7c6d17 100644 --- a/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.cs +++ b/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalAssistantsNamedToolChoiceFunction { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalAssistantsNamedToolChoiceFunction(string name) { Argument.AssertNotNull(name, nameof(name)); @@ -21,7 +20,7 @@ public InternalAssistantsNamedToolChoiceFunction(string name) internal InternalAssistantsNamedToolChoiceFunction(string name, IDictionary serializedAdditionalRawData) { Name = name; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalAssistantsNamedToolChoiceFunction() diff --git a/src/Generated/Models/InternalAutoChunkingStrategy.Serialization.cs b/src/Generated/Models/InternalAutoChunkingStrategy.Serialization.cs index 5ec907836..917db7e29 100644 --- a/src/Generated/Models/InternalAutoChunkingStrategy.Serialization.cs +++ b/src/Generated/Models/InternalAutoChunkingStrategy.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static InternalAutoChunkingStrategy DeserializeInternalAutoChunkingStra type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.Serialization.cs b/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.Serialization.cs index e9c4669f3..5488cd2bd 100644 --- a/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.Serialization.cs +++ b/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter w } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static InternalAutoChunkingStrategyRequestParam DeserializeInternalAuto type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalBatchError.Serialization.cs b/src/Generated/Models/InternalBatchError.Serialization.cs index 244a1f826..ae3fd87d4 100644 --- a/src/Generated/Models/InternalBatchError.Serialization.cs +++ b/src/Generated/Models/InternalBatchError.Serialization.cs @@ -21,17 +21,17 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteStartObject(); - if (Optional.IsDefined(Code)) + if (SerializedAdditionalRawData?.ContainsKey("code") != true && Optional.IsDefined(Code)) { writer.WritePropertyName("code"u8); writer.WriteStringValue(Code); } - if (Optional.IsDefined(Message)) + if (SerializedAdditionalRawData?.ContainsKey("message") != true && Optional.IsDefined(Message)) { writer.WritePropertyName("message"u8); writer.WriteStringValue(Message); } - if (Optional.IsDefined(Param)) + if (SerializedAdditionalRawData?.ContainsKey("param") != true && Optional.IsDefined(Param)) { if (Param != null) { @@ -43,7 +43,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("param"); } } - if (Optional.IsDefined(Line)) + if (SerializedAdditionalRawData?.ContainsKey("line") != true && Optional.IsDefined(Line)) { if (Line != null) { @@ -55,10 +55,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("line"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -131,8 +135,9 @@ internal static InternalBatchError DeserializeInternalBatchError(JsonElement ele line = property.Value.GetInt32(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalBatchError.cs b/src/Generated/Models/InternalBatchError.cs index 95c0f9a19..411b48c42 100644 --- a/src/Generated/Models/InternalBatchError.cs +++ b/src/Generated/Models/InternalBatchError.cs @@ -9,8 +9,7 @@ namespace OpenAI.Batch { internal partial class InternalBatchError { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalBatchError() { } @@ -21,7 +20,7 @@ internal InternalBatchError(string code, string message, string param, int? line Message = message; Param = param; Line = line; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public string Code { get; } diff --git a/src/Generated/Models/InternalBatchErrors.Serialization.cs b/src/Generated/Models/InternalBatchErrors.Serialization.cs index 298936965..8f3d349c5 100644 --- a/src/Generated/Models/InternalBatchErrors.Serialization.cs +++ b/src/Generated/Models/InternalBatchErrors.Serialization.cs @@ -21,12 +21,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWri } writer.WriteStartObject(); - if (Optional.IsDefined(Object)) + if (SerializedAdditionalRawData?.ContainsKey("object") != true && Optional.IsDefined(Object)) { writer.WritePropertyName("object"u8); writer.WriteStringValue(Object.Value.ToString()); } - if (Optional.IsCollectionDefined(Data)) + if (SerializedAdditionalRawData?.ContainsKey("data") != true && Optional.IsCollectionDefined(Data)) { writer.WritePropertyName("data"u8); writer.WriteStartArray(); @@ -36,10 +36,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWri } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -103,8 +107,9 @@ internal static InternalBatchErrors DeserializeInternalBatchErrors(JsonElement e data = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalBatchErrors.cs b/src/Generated/Models/InternalBatchErrors.cs index 34a202a56..ef20e9e07 100644 --- a/src/Generated/Models/InternalBatchErrors.cs +++ b/src/Generated/Models/InternalBatchErrors.cs @@ -9,8 +9,7 @@ namespace OpenAI.Batch { internal partial class InternalBatchErrors { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalBatchErrors() { Data = new ChangeTrackingList(); @@ -20,7 +19,7 @@ internal InternalBatchErrors(InternalBatchErrorsObject? @object, IReadOnlyList.Write(Utf8JsonWriter writer, ModelReaderWriter } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("endpoint"u8); - writer.WriteStringValue(Endpoint); - if (Optional.IsDefined(Errors)) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("endpoint") != true) + { + writer.WritePropertyName("endpoint"u8); + writer.WriteStringValue(Endpoint); + } + if (SerializedAdditionalRawData?.ContainsKey("errors") != true && Optional.IsDefined(Errors)) { writer.WritePropertyName("errors"u8); writer.WriteObjectValue(Errors, options); } - writer.WritePropertyName("input_file_id"u8); - writer.WriteStringValue(InputFileId); - writer.WritePropertyName("completion_window"u8); - writer.WriteStringValue(CompletionWindow); - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.ToString()); - if (Optional.IsDefined(OutputFileId)) + if (SerializedAdditionalRawData?.ContainsKey("input_file_id") != true) + { + writer.WritePropertyName("input_file_id"u8); + writer.WriteStringValue(InputFileId); + } + if (SerializedAdditionalRawData?.ContainsKey("completion_window") != true) + { + writer.WritePropertyName("completion_window"u8); + writer.WriteStringValue(CompletionWindow); + } + if (SerializedAdditionalRawData?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("output_file_id") != true && Optional.IsDefined(OutputFileId)) { writer.WritePropertyName("output_file_id"u8); writer.WriteStringValue(OutputFileId); } - if (Optional.IsDefined(ErrorFileId)) + if (SerializedAdditionalRawData?.ContainsKey("error_file_id") != true && Optional.IsDefined(ErrorFileId)) { writer.WritePropertyName("error_file_id"u8); writer.WriteStringValue(ErrorFileId); } - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - if (Optional.IsDefined(InProgressAt)) + if (SerializedAdditionalRawData?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (SerializedAdditionalRawData?.ContainsKey("in_progress_at") != true && Optional.IsDefined(InProgressAt)) { writer.WritePropertyName("in_progress_at"u8); writer.WriteNumberValue(InProgressAt.Value, "U"); } - if (Optional.IsDefined(ExpiresAt)) + if (SerializedAdditionalRawData?.ContainsKey("expires_at") != true && Optional.IsDefined(ExpiresAt)) { writer.WritePropertyName("expires_at"u8); writer.WriteNumberValue(ExpiresAt.Value, "U"); } - if (Optional.IsDefined(FinalizingAt)) + if (SerializedAdditionalRawData?.ContainsKey("finalizing_at") != true && Optional.IsDefined(FinalizingAt)) { writer.WritePropertyName("finalizing_at"u8); writer.WriteNumberValue(FinalizingAt.Value, "U"); } - if (Optional.IsDefined(CompletedAt)) + if (SerializedAdditionalRawData?.ContainsKey("completed_at") != true && Optional.IsDefined(CompletedAt)) { writer.WritePropertyName("completed_at"u8); writer.WriteNumberValue(CompletedAt.Value, "U"); } - if (Optional.IsDefined(FailedAt)) + if (SerializedAdditionalRawData?.ContainsKey("failed_at") != true && Optional.IsDefined(FailedAt)) { writer.WritePropertyName("failed_at"u8); writer.WriteNumberValue(FailedAt.Value, "U"); } - if (Optional.IsDefined(ExpiredAt)) + if (SerializedAdditionalRawData?.ContainsKey("expired_at") != true && Optional.IsDefined(ExpiredAt)) { writer.WritePropertyName("expired_at"u8); writer.WriteNumberValue(ExpiredAt.Value, "U"); } - if (Optional.IsDefined(CancellingAt)) + if (SerializedAdditionalRawData?.ContainsKey("cancelling_at") != true && Optional.IsDefined(CancellingAt)) { writer.WritePropertyName("cancelling_at"u8); writer.WriteNumberValue(CancellingAt.Value, "U"); } - if (Optional.IsDefined(CancelledAt)) + if (SerializedAdditionalRawData?.ContainsKey("cancelled_at") != true && Optional.IsDefined(CancelledAt)) { writer.WritePropertyName("cancelled_at"u8); writer.WriteNumberValue(CancelledAt.Value, "U"); } - if (Optional.IsDefined(RequestCounts)) + if (SerializedAdditionalRawData?.ContainsKey("request_counts") != true && Optional.IsDefined(RequestCounts)) { writer.WritePropertyName("request_counts"u8); writer.WriteObjectValue(RequestCounts, options); } - if (Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true && Optional.IsCollectionDefined(Metadata)) { if (Metadata != null) { @@ -113,10 +134,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter writer.WriteNull("metadata"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -324,8 +349,9 @@ internal static InternalBatchJob DeserializeInternalBatchJob(JsonElement element metadata = dictionary; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalBatchJob.cs b/src/Generated/Models/InternalBatchJob.cs index 8cd8558b7..bbd35aeac 100644 --- a/src/Generated/Models/InternalBatchJob.cs +++ b/src/Generated/Models/InternalBatchJob.cs @@ -9,8 +9,7 @@ namespace OpenAI.Batch { internal partial class InternalBatchJob { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalBatchJob(string id, string endpoint, string inputFileId, string completionWindow, InternalBatchStatus status, DateTimeOffset createdAt) { Argument.AssertNotNull(id, nameof(id)); @@ -49,7 +48,7 @@ internal InternalBatchJob(string id, InternalBatchObject @object, string endpoin CancelledAt = cancelledAt; RequestCounts = requestCounts; Metadata = metadata; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalBatchJob() diff --git a/src/Generated/Models/InternalBatchRequestCounts.Serialization.cs b/src/Generated/Models/InternalBatchRequestCounts.Serialization.cs index 7f41654a4..ad1b1f9c9 100644 --- a/src/Generated/Models/InternalBatchRequestCounts.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestCounts.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } writer.WriteStartObject(); - writer.WritePropertyName("total"u8); - writer.WriteNumberValue(Total); - writer.WritePropertyName("completed"u8); - writer.WriteNumberValue(Completed); - writer.WritePropertyName("failed"u8); - writer.WriteNumberValue(Failed); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("total") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("total"u8); + writer.WriteNumberValue(Total); + } + if (SerializedAdditionalRawData?.ContainsKey("completed") != true) + { + writer.WritePropertyName("completed"u8); + writer.WriteNumberValue(Completed); + } + if (SerializedAdditionalRawData?.ContainsKey("failed") != true) + { + writer.WritePropertyName("failed"u8); + writer.WriteNumberValue(Failed); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalBatchRequestCounts DeserializeInternalBatchRequestCounts failed = property.Value.GetInt32(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalBatchRequestCounts.cs b/src/Generated/Models/InternalBatchRequestCounts.cs index 71e1291d6..1e9731e07 100644 --- a/src/Generated/Models/InternalBatchRequestCounts.cs +++ b/src/Generated/Models/InternalBatchRequestCounts.cs @@ -9,8 +9,7 @@ namespace OpenAI.Batch { internal partial class InternalBatchRequestCounts { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalBatchRequestCounts(int total, int completed, int failed) { Total = total; @@ -23,7 +22,7 @@ internal InternalBatchRequestCounts(int total, int completed, int failed, IDicti Total = total; Completed = completed; Failed = failed; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalBatchRequestCounts() diff --git a/src/Generated/Models/InternalBatchRequestInput.Serialization.cs b/src/Generated/Models/InternalBatchRequestInput.Serialization.cs index 4bd2be752..b367f63b4 100644 --- a/src/Generated/Models/InternalBatchRequestInput.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestInput.Serialization.cs @@ -21,25 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea } writer.WriteStartObject(); - if (Optional.IsDefined(CustomId)) + if (SerializedAdditionalRawData?.ContainsKey("custom_id") != true && Optional.IsDefined(CustomId)) { writer.WritePropertyName("custom_id"u8); writer.WriteStringValue(CustomId); } - if (Optional.IsDefined(Method)) + if (SerializedAdditionalRawData?.ContainsKey("method") != true && Optional.IsDefined(Method)) { writer.WritePropertyName("method"u8); writer.WriteStringValue(Method.Value.ToString()); } - if (Optional.IsDefined(Url)) + if (SerializedAdditionalRawData?.ContainsKey("url") != true && Optional.IsDefined(Url)) { writer.WritePropertyName("url"u8); writer.WriteStringValue(Url.AbsoluteUri); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -104,8 +108,9 @@ internal static InternalBatchRequestInput DeserializeInternalBatchRequestInput(J url = new Uri(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalBatchRequestInput.cs b/src/Generated/Models/InternalBatchRequestInput.cs index 326f116b7..7e4b58c93 100644 --- a/src/Generated/Models/InternalBatchRequestInput.cs +++ b/src/Generated/Models/InternalBatchRequestInput.cs @@ -9,8 +9,7 @@ namespace OpenAI.Batch { internal partial class InternalBatchRequestInput { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalBatchRequestInput() { } @@ -20,7 +19,7 @@ internal InternalBatchRequestInput(string customId, InternalBatchRequestInputMet CustomId = customId; Method = method; Url = url; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public string CustomId { get; set; } diff --git a/src/Generated/Models/InternalBatchRequestOutput.Serialization.cs b/src/Generated/Models/InternalBatchRequestOutput.Serialization.cs index 94facbd59..7469e791d 100644 --- a/src/Generated/Models/InternalBatchRequestOutput.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestOutput.Serialization.cs @@ -21,17 +21,17 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } writer.WriteStartObject(); - if (Optional.IsDefined(Id)) + if (SerializedAdditionalRawData?.ContainsKey("id") != true && Optional.IsDefined(Id)) { writer.WritePropertyName("id"u8); writer.WriteStringValue(Id); } - if (Optional.IsDefined(CustomId)) + if (SerializedAdditionalRawData?.ContainsKey("custom_id") != true && Optional.IsDefined(CustomId)) { writer.WritePropertyName("custom_id"u8); writer.WriteStringValue(CustomId); } - if (Optional.IsDefined(Response)) + if (SerializedAdditionalRawData?.ContainsKey("response") != true && Optional.IsDefined(Response)) { if (Response != null) { @@ -43,7 +43,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteNull("response"); } } - if (Optional.IsDefined(Error)) + if (SerializedAdditionalRawData?.ContainsKey("error") != true && Optional.IsDefined(Error)) { if (Error != null) { @@ -55,10 +55,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteNull("error"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -131,8 +135,9 @@ internal static InternalBatchRequestOutput DeserializeInternalBatchRequestOutput error = InternalBatchRequestOutputError.DeserializeInternalBatchRequestOutputError(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalBatchRequestOutput.cs b/src/Generated/Models/InternalBatchRequestOutput.cs index 41d1a36d2..ae119ecd7 100644 --- a/src/Generated/Models/InternalBatchRequestOutput.cs +++ b/src/Generated/Models/InternalBatchRequestOutput.cs @@ -9,8 +9,7 @@ namespace OpenAI.Batch { internal partial class InternalBatchRequestOutput { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalBatchRequestOutput() { } @@ -21,7 +20,7 @@ internal InternalBatchRequestOutput(string id, string customId, InternalBatchReq CustomId = customId; Response = response; Error = error; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public string Id { get; } diff --git a/src/Generated/Models/InternalBatchRequestOutputError.Serialization.cs b/src/Generated/Models/InternalBatchRequestOutputError.Serialization.cs index 483cb262d..64dc33a38 100644 --- a/src/Generated/Models/InternalBatchRequestOutputError.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestOutputError.Serialization.cs @@ -21,20 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo } writer.WriteStartObject(); - if (Optional.IsDefined(Code)) + if (SerializedAdditionalRawData?.ContainsKey("code") != true && Optional.IsDefined(Code)) { writer.WritePropertyName("code"u8); writer.WriteStringValue(Code); } - if (Optional.IsDefined(Message)) + if (SerializedAdditionalRawData?.ContainsKey("message") != true && Optional.IsDefined(Message)) { writer.WritePropertyName("message"u8); writer.WriteStringValue(Message); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -85,8 +89,9 @@ internal static InternalBatchRequestOutputError DeserializeInternalBatchRequestO message = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalBatchRequestOutputError.cs b/src/Generated/Models/InternalBatchRequestOutputError.cs index c1745449d..b2ddd5bea 100644 --- a/src/Generated/Models/InternalBatchRequestOutputError.cs +++ b/src/Generated/Models/InternalBatchRequestOutputError.cs @@ -9,8 +9,7 @@ namespace OpenAI.Batch { internal partial class InternalBatchRequestOutputError { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalBatchRequestOutputError() { } @@ -19,7 +18,7 @@ internal InternalBatchRequestOutputError(string code, string message, IDictionar { Code = code; Message = message; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public string Code { get; } diff --git a/src/Generated/Models/InternalBatchRequestOutputResponse.Serialization.cs b/src/Generated/Models/InternalBatchRequestOutputResponse.Serialization.cs index c0de57ea1..b313874b5 100644 --- a/src/Generated/Models/InternalBatchRequestOutputResponse.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestOutputResponse.Serialization.cs @@ -21,17 +21,17 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - if (Optional.IsDefined(StatusCode)) + if (SerializedAdditionalRawData?.ContainsKey("status_code") != true && Optional.IsDefined(StatusCode)) { writer.WritePropertyName("status_code"u8); writer.WriteNumberValue(StatusCode.Value); } - if (Optional.IsDefined(RequestId)) + if (SerializedAdditionalRawData?.ContainsKey("request_id") != true && Optional.IsDefined(RequestId)) { writer.WritePropertyName("request_id"u8); writer.WriteStringValue(RequestId); } - if (Optional.IsCollectionDefined(Body)) + if (SerializedAdditionalRawData?.ContainsKey("body") != true && Optional.IsCollectionDefined(Body)) { writer.WritePropertyName("body"u8); writer.WriteStartObject(); @@ -42,10 +42,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteEndObject(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -115,8 +119,9 @@ internal static InternalBatchRequestOutputResponse DeserializeInternalBatchReque body = dictionary; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalBatchRequestOutputResponse.cs b/src/Generated/Models/InternalBatchRequestOutputResponse.cs index e315808e3..2919fec21 100644 --- a/src/Generated/Models/InternalBatchRequestOutputResponse.cs +++ b/src/Generated/Models/InternalBatchRequestOutputResponse.cs @@ -9,8 +9,7 @@ namespace OpenAI.Batch { internal partial class InternalBatchRequestOutputResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalBatchRequestOutputResponse() { Body = new ChangeTrackingDictionary(); @@ -21,7 +20,7 @@ internal InternalBatchRequestOutputResponse(int? statusCode, string requestId, I StatusCode = statusCode; RequestId = requestId; Body = body; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public int? StatusCode { get; } diff --git a/src/Generated/Models/InternalChatCompletionFunctionCallOption.Serialization.cs b/src/Generated/Models/InternalChatCompletionFunctionCallOption.Serialization.cs index cb0cd1051..848aa320c 100644 --- a/src/Generated/Models/InternalChatCompletionFunctionCallOption.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionFunctionCallOption.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter w } writer.WriteStartObject(); - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("name") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static InternalChatCompletionFunctionCallOption DeserializeInternalChat name = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalChatCompletionFunctionCallOption.cs b/src/Generated/Models/InternalChatCompletionFunctionCallOption.cs index 1de09aca4..2cb95446c 100644 --- a/src/Generated/Models/InternalChatCompletionFunctionCallOption.cs +++ b/src/Generated/Models/InternalChatCompletionFunctionCallOption.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionFunctionCallOption { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalChatCompletionFunctionCallOption(string name) { Argument.AssertNotNull(name, nameof(name)); @@ -21,7 +20,7 @@ public InternalChatCompletionFunctionCallOption(string name) internal InternalChatCompletionFunctionCallOption(string name, IDictionary serializedAdditionalRawData) { Name = name; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalChatCompletionFunctionCallOption() diff --git a/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.Serialization.cs b/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.Serialization.cs index 014415feb..6b3929ddf 100644 --- a/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.Serialization.cs @@ -21,20 +21,24 @@ void IJsonModel.Write(Utf8Js } writer.WriteStartObject(); - if (Optional.IsDefined(Name)) + if (SerializedAdditionalRawData?.ContainsKey("name") != true && Optional.IsDefined(Name)) { writer.WritePropertyName("name"u8); writer.WriteStringValue(Name); } - if (Optional.IsDefined(Arguments)) + if (SerializedAdditionalRawData?.ContainsKey("arguments") != true && Optional.IsDefined(Arguments)) { writer.WritePropertyName("arguments"u8); writer.WriteStringValue(Arguments); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -85,8 +89,9 @@ internal static InternalChatCompletionMessageToolCallChunkFunction DeserializeIn arguments = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.cs b/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.cs index 6ec668c55..3119ca2e9 100644 --- a/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.cs +++ b/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionMessageToolCallChunkFunction { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalChatCompletionMessageToolCallChunkFunction() { } @@ -19,7 +18,7 @@ internal InternalChatCompletionMessageToolCallChunkFunction(string name, string { Name = name; Arguments = arguments; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public string Name { get; } diff --git a/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.Serialization.cs b/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.Serialization.cs index 2ca9d546c..d6fc850ee 100644 --- a/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWri } writer.WriteStartObject(); - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - writer.WritePropertyName("arguments"u8); - writer.WriteStringValue(Arguments); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("name") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (SerializedAdditionalRawData?.ContainsKey("arguments") != true) + { + writer.WritePropertyName("arguments"u8); + writer.WriteStringValue(Arguments); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static InternalChatCompletionMessageToolCallFunction DeserializeInterna arguments = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.cs b/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.cs index 8a65263a6..c725868a0 100644 --- a/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.cs +++ b/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionMessageToolCallFunction { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalChatCompletionMessageToolCallFunction(string name, string arguments) { Argument.AssertNotNull(name, nameof(name)); @@ -24,7 +23,7 @@ internal InternalChatCompletionMessageToolCallFunction(string name, string argum { Name = name; Arguments = arguments; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalChatCompletionMessageToolCallFunction() diff --git a/src/Generated/Models/InternalChatCompletionNamedToolChoice.Serialization.cs b/src/Generated/Models/InternalChatCompletionNamedToolChoice.Serialization.cs index eb51e8eb6..b7be9a655 100644 --- a/src/Generated/Models/InternalChatCompletionNamedToolChoice.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionNamedToolChoice.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writ } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - writer.WritePropertyName("function"u8); - writer.WriteObjectValue(Function, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("function") != true) + { + writer.WritePropertyName("function"u8); + writer.WriteObjectValue(Function, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static InternalChatCompletionNamedToolChoice DeserializeInternalChatCom function = InternalChatCompletionNamedToolChoiceFunction.DeserializeInternalChatCompletionNamedToolChoiceFunction(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalChatCompletionNamedToolChoice.cs b/src/Generated/Models/InternalChatCompletionNamedToolChoice.cs index c397cfdd7..4538d8136 100644 --- a/src/Generated/Models/InternalChatCompletionNamedToolChoice.cs +++ b/src/Generated/Models/InternalChatCompletionNamedToolChoice.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionNamedToolChoice { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalChatCompletionNamedToolChoice(InternalChatCompletionNamedToolChoiceFunction function) { Argument.AssertNotNull(function, nameof(function)); @@ -22,7 +21,7 @@ internal InternalChatCompletionNamedToolChoice(InternalChatCompletionNamedToolCh { Type = type; Function = function; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalChatCompletionNamedToolChoice() diff --git a/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.Serialization.cs b/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.Serialization.cs index f094e0024..4714a67cf 100644 --- a/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWri } writer.WriteStartObject(); - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("name") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static InternalChatCompletionNamedToolChoiceFunction DeserializeInterna name = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.cs b/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.cs index 9e683d68f..5097bcb79 100644 --- a/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.cs +++ b/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionNamedToolChoiceFunction { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalChatCompletionNamedToolChoiceFunction(string name) { Argument.AssertNotNull(name, nameof(name)); @@ -21,7 +20,7 @@ public InternalChatCompletionNamedToolChoiceFunction(string name) internal InternalChatCompletionNamedToolChoiceFunction(string name, IDictionary serializedAdditionalRawData) { Name = name; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalChatCompletionNamedToolChoiceFunction() diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.Serialization.cs index 925e06c93..560d39cd5 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8 } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - writer.WritePropertyName("image_url"u8); - writer.WriteObjectValue(ImageUrl, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("image_url") != true) + { + writer.WritePropertyName("image_url"u8); + writer.WriteObjectValue(ImageUrl, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static InternalChatCompletionRequestMessageContentPartImage Deserialize imageUrl = InternalChatCompletionRequestMessageContentPartImageImageUrl.DeserializeInternalChatCompletionRequestMessageContentPartImageImageUrl(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.cs index 0f3ea4a68..97fb55045 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionRequestMessageContentPartImage { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalChatCompletionRequestMessageContentPartImage(InternalChatCompletionRequestMessageContentPartImageImageUrl imageUrl) { Argument.AssertNotNull(imageUrl, nameof(imageUrl)); @@ -22,7 +21,7 @@ internal InternalChatCompletionRequestMessageContentPartImage(InternalChatComple { Type = type; ImageUrl = imageUrl; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalChatCompletionRequestMessageContentPartImage() diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.Serialization.cs index 858430389..e46518a33 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.Serialization.cs @@ -21,17 +21,24 @@ void IJsonModel.Wr } writer.WriteStartObject(); - writer.WritePropertyName("url"u8); - writer.WriteStringValue(Url); - if (Optional.IsDefined(Detail)) + if (SerializedAdditionalRawData?.ContainsKey("url") != true) + { + writer.WritePropertyName("url"u8); + writer.WriteStringValue(Url); + } + if (SerializedAdditionalRawData?.ContainsKey("detail") != true && Optional.IsDefined(Detail)) { writer.WritePropertyName("detail"u8); writer.WriteStringValue(Detail.Value.ToString()); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -86,8 +93,9 @@ internal static InternalChatCompletionRequestMessageContentPartImageImageUrl Des detail = new ImageChatMessageContentPartDetail(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs index f095aa780..1ff5dc332 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs @@ -9,7 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionRequestMessageContentPartImageImageUrl { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalChatCompletionRequestMessageContentPartImageImageUrl() { diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.Serialization.cs index 946cbc49b..acbb41526 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8J } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - writer.WritePropertyName("text"u8); - writer.WriteStringValue(Text); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static InternalChatCompletionRequestMessageContentPartText DeserializeI text = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.cs index d576932a5..09645f628 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionRequestMessageContentPartText { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalChatCompletionRequestMessageContentPartText(string text) { Argument.AssertNotNull(text, nameof(text)); @@ -22,7 +21,7 @@ internal InternalChatCompletionRequestMessageContentPartText(InternalChatComplet { Type = type; Text = text; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalChatCompletionRequestMessageContentPartText() diff --git a/src/Generated/Models/InternalChatCompletionResponseMessage.cs b/src/Generated/Models/InternalChatCompletionResponseMessage.cs index e19166834..114a9ae55 100644 --- a/src/Generated/Models/InternalChatCompletionResponseMessage.cs +++ b/src/Generated/Models/InternalChatCompletionResponseMessage.cs @@ -10,7 +10,7 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionResponseMessage { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalChatCompletionResponseMessage(IReadOnlyList content, IReadOnlyList toolCalls, ChatMessageRole role, ChatFunctionCall functionCall, IDictionary serializedAdditionalRawData) { @@ -18,7 +18,7 @@ internal InternalChatCompletionResponseMessage(IReadOnlyList.Write(Utf8Jso } writer.WriteStartObject(); - writer.WritePropertyName("arguments"u8); - writer.WriteStringValue(Arguments); - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("arguments") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("arguments"u8); + writer.WriteStringValue(Arguments); + } + if (SerializedAdditionalRawData?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static InternalChatCompletionResponseMessageFunctionCall DeserializeInt name = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalChatCompletionResponseMessageFunctionCall.cs b/src/Generated/Models/InternalChatCompletionResponseMessageFunctionCall.cs index fd02a042d..6a070987f 100644 --- a/src/Generated/Models/InternalChatCompletionResponseMessageFunctionCall.cs +++ b/src/Generated/Models/InternalChatCompletionResponseMessageFunctionCall.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionResponseMessageFunctionCall { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalChatCompletionResponseMessageFunctionCall(string arguments, string name) { Argument.AssertNotNull(arguments, nameof(arguments)); @@ -24,7 +23,7 @@ internal InternalChatCompletionResponseMessageFunctionCall(string arguments, str { Arguments = arguments; Name = name; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalChatCompletionResponseMessageFunctionCall() diff --git a/src/Generated/Models/InternalChatCompletionStreamOptions.Serialization.cs b/src/Generated/Models/InternalChatCompletionStreamOptions.Serialization.cs index f4f985b83..c5b87c5ba 100644 --- a/src/Generated/Models/InternalChatCompletionStreamOptions.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionStreamOptions.Serialization.cs @@ -21,15 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer } writer.WriteStartObject(); - if (Optional.IsDefined(IncludeUsage)) + if (SerializedAdditionalRawData?.ContainsKey("include_usage") != true && Optional.IsDefined(IncludeUsage)) { writer.WritePropertyName("include_usage"u8); writer.WriteBooleanValue(IncludeUsage.Value); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -78,8 +82,9 @@ internal static InternalChatCompletionStreamOptions DeserializeInternalChatCompl includeUsage = property.Value.GetBoolean(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalChatCompletionStreamOptions.cs b/src/Generated/Models/InternalChatCompletionStreamOptions.cs index 8ea2d8389..65d1cc3a1 100644 --- a/src/Generated/Models/InternalChatCompletionStreamOptions.cs +++ b/src/Generated/Models/InternalChatCompletionStreamOptions.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionStreamOptions { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalChatCompletionStreamOptions() { } @@ -18,7 +17,7 @@ public InternalChatCompletionStreamOptions() internal InternalChatCompletionStreamOptions(bool? includeUsage, IDictionary serializedAdditionalRawData) { IncludeUsage = includeUsage; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public bool? IncludeUsage { get; set; } diff --git a/src/Generated/Models/InternalChatCompletionStreamResponseDelta.cs b/src/Generated/Models/InternalChatCompletionStreamResponseDelta.cs index 20d28f3c8..34085b941 100644 --- a/src/Generated/Models/InternalChatCompletionStreamResponseDelta.cs +++ b/src/Generated/Models/InternalChatCompletionStreamResponseDelta.cs @@ -9,7 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionStreamResponseDelta { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalChatCompletionStreamResponseDelta(IReadOnlyList content, StreamingChatFunctionCallUpdate functionCall, IReadOnlyList toolCalls, ChatMessageRole? role, IDictionary serializedAdditionalRawData) { @@ -17,7 +17,7 @@ internal InternalChatCompletionStreamResponseDelta(IReadOnlyList ToolCalls { get; } diff --git a/src/Generated/Models/InternalCreateAssistantRequestResponseFormat.cs b/src/Generated/Models/InternalCreateAssistantRequestResponseFormat.cs deleted file mode 100644 index c9084292d..000000000 --- a/src/Generated/Models/InternalCreateAssistantRequestResponseFormat.cs +++ /dev/null @@ -1,36 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalCreateAssistantRequestResponseFormat : IEquatable - { - private readonly string _value; - - public InternalCreateAssistantRequestResponseFormat(string value) - { - _value = value ?? throw new ArgumentNullException(nameof(value)); - } - - private const string NoneValue = "none"; - private const string AutoValue = "auto"; - - public static InternalCreateAssistantRequestResponseFormat None { get; } = new InternalCreateAssistantRequestResponseFormat(NoneValue); - public static InternalCreateAssistantRequestResponseFormat Auto { get; } = new InternalCreateAssistantRequestResponseFormat(AutoValue); - public static bool operator ==(InternalCreateAssistantRequestResponseFormat left, InternalCreateAssistantRequestResponseFormat right) => left.Equals(right); - public static bool operator !=(InternalCreateAssistantRequestResponseFormat left, InternalCreateAssistantRequestResponseFormat right) => !left.Equals(right); - public static implicit operator InternalCreateAssistantRequestResponseFormat(string value) => new InternalCreateAssistantRequestResponseFormat(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateAssistantRequestResponseFormat other && Equals(other); - public bool Equals(InternalCreateAssistantRequestResponseFormat other) => string.Equals(_value, other._value, StringComparison.InvariantCultureIgnoreCase); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override int GetHashCode() => _value != null ? StringComparer.InvariantCultureIgnoreCase.GetHashCode(_value) : 0; - public override string ToString() => _value; - } -} diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResources.Serialization.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResources.Serialization.cs index 2705ffb74..5b0d4696c 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResources.Serialization.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResources.Serialization.cs @@ -21,12 +21,12 @@ void IJsonModel.Write(Utf8JsonWrite } writer.WriteStartObject(); - if (Optional.IsDefined(CodeInterpreter)) + if (SerializedAdditionalRawData?.ContainsKey("code_interpreter") != true && Optional.IsDefined(CodeInterpreter)) { writer.WritePropertyName("code_interpreter"u8); writer.WriteObjectValue(CodeInterpreter, options); } - if (Optional.IsDefined(FileSearch)) + if (SerializedAdditionalRawData?.ContainsKey("file_search") != true && Optional.IsDefined(FileSearch)) { writer.WritePropertyName("file_search"u8); #if NET6_0_OR_GREATER @@ -38,10 +38,14 @@ void IJsonModel.Write(Utf8JsonWrite } #endif } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -100,8 +104,9 @@ internal static InternalCreateAssistantRequestToolResources DeserializeInternalC fileSearch = BinaryData.FromString(property.Value.GetRawText()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResources.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResources.cs index 2a96bb548..4ed163de6 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResources.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResources.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalCreateAssistantRequestToolResources { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateAssistantRequestToolResources() { } @@ -19,7 +18,7 @@ internal InternalCreateAssistantRequestToolResources(InternalCreateAssistantRequ { CodeInterpreter = codeInterpreter; FileSearch = fileSearch; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public InternalCreateAssistantRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.Serialization.cs index e501165f1..8ae1d4bb1 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Writ } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(FileIds)) + if (SerializedAdditionalRawData?.ContainsKey("file_ids") != true && Optional.IsCollectionDefined(FileIds)) { writer.WritePropertyName("file_ids"u8); writer.WriteStartArray(); @@ -31,10 +31,14 @@ void IJsonModel.Writ } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -88,8 +92,9 @@ internal static InternalCreateAssistantRequestToolResourcesCodeInterpreter Deser fileIds = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.cs index 73bb12b11..ee042f14f 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalCreateAssistantRequestToolResourcesCodeInterpreter { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateAssistantRequestToolResourcesCodeInterpreter() { FileIds = new ChangeTrackingList(); @@ -19,7 +18,7 @@ public InternalCreateAssistantRequestToolResourcesCodeInterpreter() internal InternalCreateAssistantRequestToolResourcesCodeInterpreter(IList fileIds, IDictionary serializedAdditionalRawData) { FileIds = fileIds; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IList FileIds { get; } diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchBase.Serialization.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchBase.Serialization.cs index c3fa6061e..c4bcf3750 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchBase.Serialization.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchBase.Serialization.cs @@ -21,10 +21,14 @@ void IJsonModel.Write } writer.WriteStartObject(); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -63,8 +67,9 @@ internal static InternalCreateAssistantRequestToolResourcesFileSearchBase Deseri Dictionary rawDataDictionary = new Dictionary(); foreach (var property in element.EnumerateObject()) { - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchBase.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchBase.cs index 6776d76c9..31dff8351 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchBase.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchBase.cs @@ -9,15 +9,14 @@ namespace OpenAI.Assistants { internal partial class InternalCreateAssistantRequestToolResourcesFileSearchBase { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateAssistantRequestToolResourcesFileSearchBase() { } internal InternalCreateAssistantRequestToolResourcesFileSearchBase(IDictionary serializedAdditionalRawData) { - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } } } diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreCreationHelpers.Serialization.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreCreationHelpers.Serialization.cs index 6a0828425..a65061481 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreCreationHelpers.Serialization.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreCreationHelpers.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreCreationHelpers.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreCreationHelpers.cs index 88ce6d471..bb2896dc6 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreCreationHelpers.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreCreationHelpers.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreCreationHelpers { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreCreationHelpers() { VectorStores = new ChangeTrackingList(); @@ -19,7 +18,7 @@ public InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreCreationH internal InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreCreationHelpers(IList vectorStores, IDictionary serializedAdditionalRawData) { VectorStores = vectorStores; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IList VectorStores { get; } diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreIdReferences.Serialization.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreIdReferences.Serialization.cs index 11f4276da..4c9db0070 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreIdReferences.Serialization.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreIdReferences.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreIdReferences.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreIdReferences.cs index e14a4854e..ba6da6ac4 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreIdReferences.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreIdReferences.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreIdReferences { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreIdReferences() { VectorStoreIds = new ChangeTrackingList(); @@ -19,7 +18,7 @@ public InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreIdReferen internal InternalCreateAssistantRequestToolResourcesFileSearchVectorStoreIdReferences(IList vectorStoreIds, IDictionary serializedAdditionalRawData) { VectorStoreIds = vectorStoreIds; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IList VectorStoreIds { get; } diff --git a/src/Generated/Models/InternalCreateBatchRequest.Serialization.cs b/src/Generated/Models/InternalCreateBatchRequest.Serialization.cs index 22aadf4b3..236bd183b 100644 --- a/src/Generated/Models/InternalCreateBatchRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateBatchRequest.Serialization.cs @@ -21,13 +21,22 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } writer.WriteStartObject(); - writer.WritePropertyName("input_file_id"u8); - writer.WriteStringValue(InputFileId); - writer.WritePropertyName("endpoint"u8); - writer.WriteStringValue(Endpoint.ToString()); - writer.WritePropertyName("completion_window"u8); - writer.WriteStringValue(CompletionWindow.ToString()); - if (Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("input_file_id") != true) + { + writer.WritePropertyName("input_file_id"u8); + writer.WriteStringValue(InputFileId); + } + if (SerializedAdditionalRawData?.ContainsKey("endpoint") != true) + { + writer.WritePropertyName("endpoint"u8); + writer.WriteStringValue(Endpoint.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("completion_window") != true) + { + writer.WritePropertyName("completion_window"u8); + writer.WriteStringValue(CompletionWindow.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true && Optional.IsCollectionDefined(Metadata)) { if (Metadata != null) { @@ -45,10 +54,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteNull("metadata"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -120,8 +133,9 @@ internal static InternalCreateBatchRequest DeserializeInternalCreateBatchRequest metadata = dictionary; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateBatchRequest.cs b/src/Generated/Models/InternalCreateBatchRequest.cs index dbe3be6dd..a50129fc8 100644 --- a/src/Generated/Models/InternalCreateBatchRequest.cs +++ b/src/Generated/Models/InternalCreateBatchRequest.cs @@ -9,8 +9,7 @@ namespace OpenAI.Batch { internal partial class InternalCreateBatchRequest { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateBatchRequest(string inputFileId, InternalCreateBatchRequestEndpoint endpoint) { Argument.AssertNotNull(inputFileId, nameof(inputFileId)); @@ -26,7 +25,7 @@ internal InternalCreateBatchRequest(string inputFileId, InternalCreateBatchReque Endpoint = endpoint; CompletionWindow = completionWindow; Metadata = metadata; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateBatchRequest() diff --git a/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.Serialization.cs index 48c22da1e..54c21775f 100644 --- a/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.Serialization.cs @@ -21,35 +21,54 @@ void IJsonModel.Write(Utf8JsonWrit } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("choices"u8); - writer.WriteStartArray(); - foreach (var item in Choices) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); } - writer.WriteEndArray(); - writer.WritePropertyName("created"u8); - writer.WriteNumberValue(Created, "U"); - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model); - if (Optional.IsDefined(SystemFingerprint)) + if (SerializedAdditionalRawData?.ContainsKey("choices") != true) + { + writer.WritePropertyName("choices"u8); + writer.WriteStartArray(); + foreach (var item in Choices) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("created") != true) + { + writer.WritePropertyName("created"u8); + writer.WriteNumberValue(Created, "U"); + } + if (SerializedAdditionalRawData?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (SerializedAdditionalRawData?.ContainsKey("system_fingerprint") != true && Optional.IsDefined(SystemFingerprint)) { writer.WritePropertyName("system_fingerprint"u8); writer.WriteStringValue(SystemFingerprint); } - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (Optional.IsDefined(Usage)) + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("usage") != true && Optional.IsDefined(Usage)) { writer.WritePropertyName("usage"u8); writer.WriteObjectValue(Usage, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -139,8 +158,9 @@ internal static InternalCreateChatCompletionFunctionResponse DeserializeInternal usage = ChatTokenUsage.DeserializeChatTokenUsage(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.cs b/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.cs index d8a763b46..19c621203 100644 --- a/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.cs +++ b/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.cs @@ -10,8 +10,7 @@ namespace OpenAI.Chat { internal partial class InternalCreateChatCompletionFunctionResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalCreateChatCompletionFunctionResponse(string id, IEnumerable choices, DateTimeOffset created, string model) { Argument.AssertNotNull(id, nameof(id)); @@ -33,7 +32,7 @@ internal InternalCreateChatCompletionFunctionResponse(string id, IReadOnlyList.Write(Utf8Js } writer.WriteStartObject(); - writer.WritePropertyName("finish_reason"u8); - writer.WriteStringValue(FinishReason.ToString()); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - writer.WritePropertyName("message"u8); - writer.WriteObjectValue(Message, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("finish_reason") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("finish_reason"u8); + writer.WriteStringValue(FinishReason.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + if (SerializedAdditionalRawData?.ContainsKey("message") != true) + { + writer.WritePropertyName("message"u8); + writer.WriteObjectValue(Message, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalCreateChatCompletionFunctionResponseChoice DeserializeIn message = InternalChatCompletionResponseMessage.DeserializeInternalChatCompletionResponseMessage(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoice.cs b/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoice.cs index 6e602c543..6e0687ded 100644 --- a/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoice.cs +++ b/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoice.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalCreateChatCompletionFunctionResponseChoice { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalCreateChatCompletionFunctionResponseChoice(InternalCreateChatCompletionFunctionResponseChoiceFinishReason finishReason, int index, InternalChatCompletionResponseMessage message) { Argument.AssertNotNull(message, nameof(message)); @@ -25,7 +24,7 @@ internal InternalCreateChatCompletionFunctionResponseChoice(InternalCreateChatCo FinishReason = finishReason; Index = index; Message = message; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateChatCompletionFunctionResponseChoice() diff --git a/src/Generated/Models/InternalCreateChatCompletionResponseChoice.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionResponseChoice.Serialization.cs index c3f76c08e..299fbb574 100644 --- a/src/Generated/Models/InternalCreateChatCompletionResponseChoice.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionResponseChoice.Serialization.cs @@ -21,25 +21,41 @@ void IJsonModel.Write(Utf8JsonWriter } writer.WriteStartObject(); - writer.WritePropertyName("finish_reason"u8); - writer.WriteStringValue(FinishReason.ToSerialString()); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - writer.WritePropertyName("message"u8); - writer.WriteObjectValue(Message, options); - if (Logprobs != null) + if (SerializedAdditionalRawData?.ContainsKey("finish_reason") != true) { - writer.WritePropertyName("logprobs"u8); - writer.WriteObjectValue(Logprobs, options); + writer.WritePropertyName("finish_reason"u8); + writer.WriteStringValue(FinishReason.ToSerialString()); } - else + if (SerializedAdditionalRawData?.ContainsKey("index") != true) { - writer.WriteNull("logprobs"); + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("message") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("message"u8); + writer.WriteObjectValue(Message, options); + } + if (SerializedAdditionalRawData?.ContainsKey("logprobs") != true) + { + if (Logprobs != null) + { + writer.WritePropertyName("logprobs"u8); + writer.WriteObjectValue(Logprobs, options); + } + else { + writer.WriteNull("logprobs"); + } + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -107,8 +123,9 @@ internal static InternalCreateChatCompletionResponseChoice DeserializeInternalCr logprobs = InternalCreateChatCompletionResponseChoiceLogprobs.DeserializeInternalCreateChatCompletionResponseChoiceLogprobs(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateChatCompletionResponseChoice.cs b/src/Generated/Models/InternalCreateChatCompletionResponseChoice.cs index acadf5979..88a8051cf 100644 --- a/src/Generated/Models/InternalCreateChatCompletionResponseChoice.cs +++ b/src/Generated/Models/InternalCreateChatCompletionResponseChoice.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalCreateChatCompletionResponseChoice { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalCreateChatCompletionResponseChoice(ChatFinishReason finishReason, int index, InternalChatCompletionResponseMessage message, InternalCreateChatCompletionResponseChoiceLogprobs logprobs) { Argument.AssertNotNull(message, nameof(message)); @@ -27,7 +26,7 @@ internal InternalCreateChatCompletionResponseChoice(ChatFinishReason finishReaso Index = index; Message = message; Logprobs = logprobs; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateChatCompletionResponseChoice() diff --git a/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.Serialization.cs index 58af6294e..572f387cc 100644 --- a/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.Serialization.cs @@ -21,24 +21,31 @@ void IJsonModel.Write(Utf8Js } writer.WriteStartObject(); - if (Content != null && Optional.IsCollectionDefined(Content)) + if (SerializedAdditionalRawData?.ContainsKey("content") != true) { - writer.WritePropertyName("content"u8); - writer.WriteStartArray(); - foreach (var item in Content) + if (Content != null && Optional.IsCollectionDefined(Content)) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("content"u8); + writer.WriteStartArray(); + foreach (var item in Content) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + else + { + writer.WriteNull("content"); } - writer.WriteEndArray(); - } - else - { - writer.WriteNull("content"); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -93,8 +100,9 @@ internal static InternalCreateChatCompletionResponseChoiceLogprobs DeserializeIn content = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.cs b/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.cs index 98ce05b18..d81088a5c 100644 --- a/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.cs +++ b/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.cs @@ -10,8 +10,7 @@ namespace OpenAI.Chat { internal partial class InternalCreateChatCompletionResponseChoiceLogprobs { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalCreateChatCompletionResponseChoiceLogprobs(IEnumerable content) { Content = content?.ToList(); @@ -20,7 +19,7 @@ internal InternalCreateChatCompletionResponseChoiceLogprobs(IEnumerable content, IDictionary serializedAdditionalRawData) { Content = content; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateChatCompletionResponseChoiceLogprobs() diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.cs index ed61f9a49..6bb376d9f 100644 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.cs +++ b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalCreateChatCompletionStreamResponseChoice { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalCreateChatCompletionStreamResponseChoice(InternalChatCompletionStreamResponseDelta delta, ChatFinishReason? finishReason, int index) { Argument.AssertNotNull(delta, nameof(delta)); @@ -26,7 +25,7 @@ internal InternalCreateChatCompletionStreamResponseChoice(InternalChatCompletion Logprobs = logprobs; FinishReason = finishReason; Index = index; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateChatCompletionStreamResponseChoice() diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.Serialization.cs index ac8373be3..7e3b9a4b1 100644 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.Serialization.cs @@ -21,24 +21,31 @@ void IJsonModel.Write( } writer.WriteStartObject(); - if (Content != null && Optional.IsCollectionDefined(Content)) + if (SerializedAdditionalRawData?.ContainsKey("content") != true) { - writer.WritePropertyName("content"u8); - writer.WriteStartArray(); - foreach (var item in Content) + if (Content != null && Optional.IsCollectionDefined(Content)) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("content"u8); + writer.WriteStartArray(); + foreach (var item in Content) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + else + { + writer.WriteNull("content"); } - writer.WriteEndArray(); - } - else - { - writer.WriteNull("content"); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -93,8 +100,9 @@ internal static InternalCreateChatCompletionStreamResponseChoiceLogprobs Deseria content = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.cs index ee73c03db..f0a780dd9 100644 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.cs +++ b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.cs @@ -10,8 +10,7 @@ namespace OpenAI.Chat { internal partial class InternalCreateChatCompletionStreamResponseChoiceLogprobs { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalCreateChatCompletionStreamResponseChoiceLogprobs(IEnumerable content) { Content = content?.ToList(); @@ -20,7 +19,7 @@ internal InternalCreateChatCompletionStreamResponseChoiceLogprobs(IEnumerable content, IDictionary serializedAdditionalRawData) { Content = content; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateChatCompletionStreamResponseChoiceLogprobs() diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.Serialization.cs index cd2a51e0b..3fe8d8747 100644 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonW } writer.WriteStartObject(); - writer.WritePropertyName("completion_tokens"u8); - writer.WriteNumberValue(CompletionTokens); - writer.WritePropertyName("prompt_tokens"u8); - writer.WriteNumberValue(PromptTokens); - writer.WritePropertyName("total_tokens"u8); - writer.WriteNumberValue(TotalTokens); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("completion_tokens") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("completion_tokens"u8); + writer.WriteNumberValue(CompletionTokens); + } + if (SerializedAdditionalRawData?.ContainsKey("prompt_tokens") != true) + { + writer.WritePropertyName("prompt_tokens"u8); + writer.WriteNumberValue(PromptTokens); + } + if (SerializedAdditionalRawData?.ContainsKey("total_tokens") != true) + { + writer.WritePropertyName("total_tokens"u8); + writer.WriteNumberValue(TotalTokens); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalCreateChatCompletionStreamResponseUsage DeserializeInter totalTokens = property.Value.GetInt32(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.cs index b43c1be87..922ce4cae 100644 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.cs +++ b/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalCreateChatCompletionStreamResponseUsage { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalCreateChatCompletionStreamResponseUsage(int completionTokens, int promptTokens, int totalTokens) { CompletionTokens = completionTokens; @@ -23,7 +22,7 @@ internal InternalCreateChatCompletionStreamResponseUsage(int completionTokens, i CompletionTokens = completionTokens; PromptTokens = promptTokens; TotalTokens = totalTokens; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateChatCompletionStreamResponseUsage() diff --git a/src/Generated/Models/InternalCreateCompletionRequest.Serialization.cs b/src/Generated/Models/InternalCreateCompletionRequest.Serialization.cs index e7f386c9a..ee65e7eb9 100644 --- a/src/Generated/Models/InternalCreateCompletionRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateCompletionRequest.Serialization.cs @@ -22,25 +22,31 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo } writer.WriteStartObject(); - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model.ToString()); - if (Prompt != null) + if (SerializedAdditionalRawData?.ContainsKey("model") != true) { - writer.WritePropertyName("prompt"u8); + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("prompt") != true) + { + if (Prompt != null) + { + writer.WritePropertyName("prompt"u8); #if NET6_0_OR_GREATER writer.WriteRawValue(Prompt); #else - using (JsonDocument document = JsonDocument.Parse(Prompt)) + using (JsonDocument document = JsonDocument.Parse(Prompt)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + else { - JsonSerializer.Serialize(writer, document.RootElement); + writer.WriteNull("prompt"); } -#endif - } - else - { - writer.WriteNull("prompt"); } - if (Optional.IsDefined(BestOf)) + if (SerializedAdditionalRawData?.ContainsKey("best_of") != true && Optional.IsDefined(BestOf)) { if (BestOf != null) { @@ -52,7 +58,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("best_of"); } } - if (Optional.IsDefined(Echo)) + if (SerializedAdditionalRawData?.ContainsKey("echo") != true && Optional.IsDefined(Echo)) { if (Echo != null) { @@ -64,7 +70,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("echo"); } } - if (Optional.IsDefined(FrequencyPenalty)) + if (SerializedAdditionalRawData?.ContainsKey("frequency_penalty") != true && Optional.IsDefined(FrequencyPenalty)) { if (FrequencyPenalty != null) { @@ -76,7 +82,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("frequency_penalty"); } } - if (Optional.IsCollectionDefined(LogitBias)) + if (SerializedAdditionalRawData?.ContainsKey("logit_bias") != true && Optional.IsCollectionDefined(LogitBias)) { if (LogitBias != null) { @@ -94,7 +100,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("logit_bias"); } } - if (Optional.IsDefined(Logprobs)) + if (SerializedAdditionalRawData?.ContainsKey("logprobs") != true && Optional.IsDefined(Logprobs)) { if (Logprobs != null) { @@ -106,7 +112,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("logprobs"); } } - if (Optional.IsDefined(MaxTokens)) + if (SerializedAdditionalRawData?.ContainsKey("max_tokens") != true && Optional.IsDefined(MaxTokens)) { if (MaxTokens != null) { @@ -118,7 +124,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("max_tokens"); } } - if (Optional.IsDefined(N)) + if (SerializedAdditionalRawData?.ContainsKey("n") != true && Optional.IsDefined(N)) { if (N != null) { @@ -130,7 +136,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("n"); } } - if (Optional.IsDefined(PresencePenalty)) + if (SerializedAdditionalRawData?.ContainsKey("presence_penalty") != true && Optional.IsDefined(PresencePenalty)) { if (PresencePenalty != null) { @@ -142,7 +148,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("presence_penalty"); } } - if (Optional.IsDefined(Seed)) + if (SerializedAdditionalRawData?.ContainsKey("seed") != true && Optional.IsDefined(Seed)) { if (Seed != null) { @@ -154,7 +160,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("seed"); } } - if (Optional.IsDefined(Stop)) + if (SerializedAdditionalRawData?.ContainsKey("stop") != true && Optional.IsDefined(Stop)) { if (Stop != null) { @@ -173,7 +179,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("stop"); } } - if (Optional.IsDefined(Stream)) + if (SerializedAdditionalRawData?.ContainsKey("stream") != true && Optional.IsDefined(Stream)) { if (Stream != null) { @@ -185,7 +191,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("stream"); } } - if (Optional.IsDefined(StreamOptions)) + if (SerializedAdditionalRawData?.ContainsKey("stream_options") != true && Optional.IsDefined(StreamOptions)) { if (StreamOptions != null) { @@ -197,7 +203,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("stream_options"); } } - if (Optional.IsDefined(Suffix)) + if (SerializedAdditionalRawData?.ContainsKey("suffix") != true && Optional.IsDefined(Suffix)) { if (Suffix != null) { @@ -209,7 +215,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("suffix"); } } - if (Optional.IsDefined(Temperature)) + if (SerializedAdditionalRawData?.ContainsKey("temperature") != true && Optional.IsDefined(Temperature)) { if (Temperature != null) { @@ -221,7 +227,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("temperature"); } } - if (Optional.IsDefined(TopP)) + if (SerializedAdditionalRawData?.ContainsKey("top_p") != true && Optional.IsDefined(TopP)) { if (TopP != null) { @@ -233,15 +239,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteNull("top_p"); } } - if (Optional.IsDefined(User)) + if (SerializedAdditionalRawData?.ContainsKey("user") != true && Optional.IsDefined(User)) { writer.WritePropertyName("user"u8); writer.WriteStringValue(User); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -472,8 +482,9 @@ internal static InternalCreateCompletionRequest DeserializeInternalCreateComplet user = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateCompletionRequest.cs b/src/Generated/Models/InternalCreateCompletionRequest.cs index c11955841..25e584d3b 100644 --- a/src/Generated/Models/InternalCreateCompletionRequest.cs +++ b/src/Generated/Models/InternalCreateCompletionRequest.cs @@ -10,8 +10,7 @@ namespace OpenAI.LegacyCompletions { internal partial class InternalCreateCompletionRequest { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateCompletionRequest(InternalCreateCompletionRequestModel model, BinaryData prompt) { Model = model; @@ -39,7 +38,7 @@ internal InternalCreateCompletionRequest(InternalCreateCompletionRequestModel mo Temperature = temperature; TopP = topP; User = user; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateCompletionRequest() diff --git a/src/Generated/Models/InternalCreateCompletionResponse.Serialization.cs b/src/Generated/Models/InternalCreateCompletionResponse.Serialization.cs index 9af9a80c8..06e17ee23 100644 --- a/src/Generated/Models/InternalCreateCompletionResponse.Serialization.cs +++ b/src/Generated/Models/InternalCreateCompletionResponse.Serialization.cs @@ -22,35 +22,54 @@ void IJsonModel.Write(Utf8JsonWriter writer, M } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("choices"u8); - writer.WriteStartArray(); - foreach (var item in Choices) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); } - writer.WriteEndArray(); - writer.WritePropertyName("created"u8); - writer.WriteNumberValue(Created, "U"); - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model); - if (Optional.IsDefined(SystemFingerprint)) + if (SerializedAdditionalRawData?.ContainsKey("choices") != true) + { + writer.WritePropertyName("choices"u8); + writer.WriteStartArray(); + foreach (var item in Choices) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("created") != true) + { + writer.WritePropertyName("created"u8); + writer.WriteNumberValue(Created, "U"); + } + if (SerializedAdditionalRawData?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (SerializedAdditionalRawData?.ContainsKey("system_fingerprint") != true && Optional.IsDefined(SystemFingerprint)) { writer.WritePropertyName("system_fingerprint"u8); writer.WriteStringValue(SystemFingerprint); } - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (Optional.IsDefined(Usage)) + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("usage") != true && Optional.IsDefined(Usage)) { writer.WritePropertyName("usage"u8); writer.WriteObjectValue(Usage, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -140,8 +159,9 @@ internal static InternalCreateCompletionResponse DeserializeInternalCreateComple usage = ChatTokenUsage.DeserializeChatTokenUsage(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateCompletionResponse.cs b/src/Generated/Models/InternalCreateCompletionResponse.cs index 6a974c85a..b7dd5c2a4 100644 --- a/src/Generated/Models/InternalCreateCompletionResponse.cs +++ b/src/Generated/Models/InternalCreateCompletionResponse.cs @@ -11,8 +11,7 @@ namespace OpenAI.LegacyCompletions { internal partial class InternalCreateCompletionResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalCreateCompletionResponse(string id, IEnumerable choices, DateTimeOffset created, string model) { Argument.AssertNotNull(id, nameof(id)); @@ -34,7 +33,7 @@ internal InternalCreateCompletionResponse(string id, IReadOnlyList.Write(Utf8JsonWriter wri } writer.WriteStartObject(); - writer.WritePropertyName("finish_reason"u8); - writer.WriteStringValue(FinishReason.ToString()); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - if (Logprobs != null) + if (SerializedAdditionalRawData?.ContainsKey("finish_reason") != true) { - writer.WritePropertyName("logprobs"u8); - writer.WriteObjectValue(Logprobs, options); + writer.WritePropertyName("finish_reason"u8); + writer.WriteStringValue(FinishReason.ToString()); } - else + if (SerializedAdditionalRawData?.ContainsKey("index") != true) { - writer.WriteNull("logprobs"); + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); } - writer.WritePropertyName("text"u8); - writer.WriteStringValue(Text); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("logprobs") != true) { - foreach (var item in _serializedAdditionalRawData) + if (Logprobs != null) { + writer.WritePropertyName("logprobs"u8); + writer.WriteObjectValue(Logprobs, options); + } + else + { + writer.WriteNull("logprobs"); + } + } + if (SerializedAdditionalRawData?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -107,8 +123,9 @@ internal static InternalCreateCompletionResponseChoice DeserializeInternalCreate text = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateCompletionResponseChoice.cs b/src/Generated/Models/InternalCreateCompletionResponseChoice.cs index 64fea0cfd..5aa7f0cca 100644 --- a/src/Generated/Models/InternalCreateCompletionResponseChoice.cs +++ b/src/Generated/Models/InternalCreateCompletionResponseChoice.cs @@ -9,8 +9,7 @@ namespace OpenAI.LegacyCompletions { internal partial class InternalCreateCompletionResponseChoice { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalCreateCompletionResponseChoice(InternalCreateCompletionResponseChoiceFinishReason finishReason, int index, InternalCreateCompletionResponseChoiceLogprobs logprobs, string text) { Argument.AssertNotNull(text, nameof(text)); @@ -27,7 +26,7 @@ internal InternalCreateCompletionResponseChoice(InternalCreateCompletionResponse Index = index; Logprobs = logprobs; Text = text; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateCompletionResponseChoice() diff --git a/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.Serialization.cs b/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.Serialization.cs index 561a8c807..a4d07c749 100644 --- a/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.Serialization.cs +++ b/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8JsonWr } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(TextOffset)) + if (SerializedAdditionalRawData?.ContainsKey("text_offset") != true && Optional.IsCollectionDefined(TextOffset)) { writer.WritePropertyName("text_offset"u8); writer.WriteStartArray(); @@ -31,7 +31,7 @@ void IJsonModel.Write(Utf8JsonWr } writer.WriteEndArray(); } - if (Optional.IsCollectionDefined(TokenLogprobs)) + if (SerializedAdditionalRawData?.ContainsKey("token_logprobs") != true && Optional.IsCollectionDefined(TokenLogprobs)) { writer.WritePropertyName("token_logprobs"u8); writer.WriteStartArray(); @@ -41,7 +41,7 @@ void IJsonModel.Write(Utf8JsonWr } writer.WriteEndArray(); } - if (Optional.IsCollectionDefined(Tokens)) + if (SerializedAdditionalRawData?.ContainsKey("tokens") != true && Optional.IsCollectionDefined(Tokens)) { writer.WritePropertyName("tokens"u8); writer.WriteStartArray(); @@ -51,7 +51,7 @@ void IJsonModel.Write(Utf8JsonWr } writer.WriteEndArray(); } - if (Optional.IsCollectionDefined(TopLogprobs)) + if (SerializedAdditionalRawData?.ContainsKey("top_logprobs") != true && Optional.IsCollectionDefined(TopLogprobs)) { writer.WritePropertyName("top_logprobs"u8); writer.WriteStartArray(); @@ -72,10 +72,14 @@ void IJsonModel.Write(Utf8JsonWr } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -186,8 +190,9 @@ internal static InternalCreateCompletionResponseChoiceLogprobs DeserializeIntern topLogprobs = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.cs b/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.cs index ccb3d79d0..6f5de82a3 100644 --- a/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.cs +++ b/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.cs @@ -9,8 +9,7 @@ namespace OpenAI.LegacyCompletions { internal partial class InternalCreateCompletionResponseChoiceLogprobs { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalCreateCompletionResponseChoiceLogprobs() { TextOffset = new ChangeTrackingList(); @@ -25,7 +24,7 @@ internal InternalCreateCompletionResponseChoiceLogprobs(IReadOnlyList textO TokenLogprobs = tokenLogprobs; Tokens = tokens; TopLogprobs = topLogprobs; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IReadOnlyList TextOffset { get; } diff --git a/src/Generated/Models/InternalCreateFineTuningJobRequest.Serialization.cs b/src/Generated/Models/InternalCreateFineTuningJobRequest.Serialization.cs index 9553c6d77..45eb127bf 100644 --- a/src/Generated/Models/InternalCreateFineTuningJobRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateFineTuningJobRequest.Serialization.cs @@ -21,16 +21,22 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model.ToString()); - writer.WritePropertyName("training_file"u8); - writer.WriteStringValue(TrainingFile); - if (Optional.IsDefined(Hyperparameters)) + if (SerializedAdditionalRawData?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("training_file") != true) + { + writer.WritePropertyName("training_file"u8); + writer.WriteStringValue(TrainingFile); + } + if (SerializedAdditionalRawData?.ContainsKey("hyperparameters") != true && Optional.IsDefined(Hyperparameters)) { writer.WritePropertyName("hyperparameters"u8); writer.WriteObjectValue(Hyperparameters, options); } - if (Optional.IsDefined(Suffix)) + if (SerializedAdditionalRawData?.ContainsKey("suffix") != true && Optional.IsDefined(Suffix)) { if (Suffix != null) { @@ -42,7 +48,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("suffix"); } } - if (Optional.IsDefined(ValidationFile)) + if (SerializedAdditionalRawData?.ContainsKey("validation_file") != true && Optional.IsDefined(ValidationFile)) { if (ValidationFile != null) { @@ -54,7 +60,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("validation_file"); } } - if (Optional.IsCollectionDefined(Integrations)) + if (SerializedAdditionalRawData?.ContainsKey("integrations") != true && Optional.IsCollectionDefined(Integrations)) { if (Integrations != null) { @@ -71,7 +77,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("integrations"); } } - if (Optional.IsDefined(Seed)) + if (SerializedAdditionalRawData?.ContainsKey("seed") != true && Optional.IsDefined(Seed)) { if (Seed != null) { @@ -83,10 +89,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("seed"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -195,8 +205,9 @@ internal static InternalCreateFineTuningJobRequest DeserializeInternalCreateFine seed = property.Value.GetInt32(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateFineTuningJobRequest.cs b/src/Generated/Models/InternalCreateFineTuningJobRequest.cs index cb7bb7c5c..6c183c752 100644 --- a/src/Generated/Models/InternalCreateFineTuningJobRequest.cs +++ b/src/Generated/Models/InternalCreateFineTuningJobRequest.cs @@ -9,8 +9,7 @@ namespace OpenAI.FineTuning { internal partial class InternalCreateFineTuningJobRequest { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateFineTuningJobRequest(InternalCreateFineTuningJobRequestModel model, string trainingFile) { Argument.AssertNotNull(trainingFile, nameof(trainingFile)); @@ -29,7 +28,7 @@ internal InternalCreateFineTuningJobRequest(InternalCreateFineTuningJobRequestMo ValidationFile = validationFile; Integrations = integrations; Seed = seed; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateFineTuningJobRequest() diff --git a/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparameters.Serialization.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparameters.Serialization.cs index 3aa5b580b..e5206d6b8 100644 --- a/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparameters.Serialization.cs +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparameters.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8Jso } writer.WriteStartObject(); - if (Optional.IsDefined(BatchSize)) + if (SerializedAdditionalRawData?.ContainsKey("batch_size") != true && Optional.IsDefined(BatchSize)) { writer.WritePropertyName("batch_size"u8); #if NET6_0_OR_GREATER @@ -33,7 +33,7 @@ void IJsonModel.Write(Utf8Jso } #endif } - if (Optional.IsDefined(LearningRateMultiplier)) + if (SerializedAdditionalRawData?.ContainsKey("learning_rate_multiplier") != true && Optional.IsDefined(LearningRateMultiplier)) { writer.WritePropertyName("learning_rate_multiplier"u8); #if NET6_0_OR_GREATER @@ -45,7 +45,7 @@ void IJsonModel.Write(Utf8Jso } #endif } - if (Optional.IsDefined(NEpochs)) + if (SerializedAdditionalRawData?.ContainsKey("n_epochs") != true && Optional.IsDefined(NEpochs)) { writer.WritePropertyName("n_epochs"u8); #if NET6_0_OR_GREATER @@ -57,10 +57,14 @@ void IJsonModel.Write(Utf8Jso } #endif } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -129,8 +133,9 @@ internal static InternalCreateFineTuningJobRequestHyperparameters DeserializeInt nEpochs = BinaryData.FromString(property.Value.GetRawText()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparameters.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparameters.cs index c2091f0e3..83694fba6 100644 --- a/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparameters.cs +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparameters.cs @@ -9,8 +9,7 @@ namespace OpenAI.FineTuning { internal partial class InternalCreateFineTuningJobRequestHyperparameters { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateFineTuningJobRequestHyperparameters() { } @@ -20,7 +19,7 @@ internal InternalCreateFineTuningJobRequestHyperparameters(BinaryData batchSize, BatchSize = batchSize; LearningRateMultiplier = learningRateMultiplier; NEpochs = nEpochs; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public BinaryData BatchSize { get; set; } diff --git a/src/Generated/Models/InternalCreateFineTuningJobRequestIntegration.Serialization.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestIntegration.Serialization.cs index d31787c1b..927e7dae9 100644 --- a/src/Generated/Models/InternalCreateFineTuningJobRequestIntegration.Serialization.cs +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestIntegration.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWri } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - writer.WritePropertyName("wandb"u8); - writer.WriteObjectValue(Wandb, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("wandb") != true) + { + writer.WritePropertyName("wandb"u8); + writer.WriteObjectValue(Wandb, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static InternalCreateFineTuningJobRequestIntegration DeserializeInterna wandb = InternalCreateFineTuningJobRequestIntegrationWandb.DeserializeInternalCreateFineTuningJobRequestIntegrationWandb(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateFineTuningJobRequestIntegration.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestIntegration.cs index 9767ae593..1e614b3d4 100644 --- a/src/Generated/Models/InternalCreateFineTuningJobRequestIntegration.cs +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestIntegration.cs @@ -9,8 +9,7 @@ namespace OpenAI.FineTuning { internal partial class InternalCreateFineTuningJobRequestIntegration { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateFineTuningJobRequestIntegration(InternalCreateFineTuningJobRequestIntegrationWandb wandb) { Argument.AssertNotNull(wandb, nameof(wandb)); @@ -22,7 +21,7 @@ internal InternalCreateFineTuningJobRequestIntegration(InternalCreateFineTuningJ { Type = type; Wandb = wandb; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateFineTuningJobRequestIntegration() diff --git a/src/Generated/Models/InternalCreateFineTuningJobRequestIntegrationWandb.Serialization.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestIntegrationWandb.Serialization.cs index f0c8892b8..0ee3e1188 100644 --- a/src/Generated/Models/InternalCreateFineTuningJobRequestIntegrationWandb.Serialization.cs +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestIntegrationWandb.Serialization.cs @@ -21,9 +21,12 @@ void IJsonModel.Write(Utf8Js } writer.WriteStartObject(); - writer.WritePropertyName("project"u8); - writer.WriteStringValue(Project); - if (Optional.IsDefined(Name)) + if (SerializedAdditionalRawData?.ContainsKey("project") != true) + { + writer.WritePropertyName("project"u8); + writer.WriteStringValue(Project); + } + if (SerializedAdditionalRawData?.ContainsKey("name") != true && Optional.IsDefined(Name)) { if (Name != null) { @@ -35,7 +38,7 @@ void IJsonModel.Write(Utf8Js writer.WriteNull("name"); } } - if (Optional.IsDefined(Entity)) + if (SerializedAdditionalRawData?.ContainsKey("entity") != true && Optional.IsDefined(Entity)) { if (Entity != null) { @@ -47,7 +50,7 @@ void IJsonModel.Write(Utf8Js writer.WriteNull("entity"); } } - if (Optional.IsCollectionDefined(Tags)) + if (SerializedAdditionalRawData?.ContainsKey("tags") != true && Optional.IsCollectionDefined(Tags)) { writer.WritePropertyName("tags"u8); writer.WriteStartArray(); @@ -57,10 +60,14 @@ void IJsonModel.Write(Utf8Js } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -142,8 +149,9 @@ internal static InternalCreateFineTuningJobRequestIntegrationWandb DeserializeIn tags = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateFineTuningJobRequestIntegrationWandb.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestIntegrationWandb.cs index ae5042fe8..859e7295c 100644 --- a/src/Generated/Models/InternalCreateFineTuningJobRequestIntegrationWandb.cs +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestIntegrationWandb.cs @@ -9,8 +9,7 @@ namespace OpenAI.FineTuning { internal partial class InternalCreateFineTuningJobRequestIntegrationWandb { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateFineTuningJobRequestIntegrationWandb(string project) { Argument.AssertNotNull(project, nameof(project)); @@ -25,7 +24,7 @@ internal InternalCreateFineTuningJobRequestIntegrationWandb(string project, stri Name = name; Entity = entity; Tags = tags; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateFineTuningJobRequestIntegrationWandb() diff --git a/src/Generated/Models/InternalCreateRunRequestToolChoice.cs b/src/Generated/Models/InternalCreateRunRequestToolChoice.cs deleted file mode 100644 index 343b70471..000000000 --- a/src/Generated/Models/InternalCreateRunRequestToolChoice.cs +++ /dev/null @@ -1,38 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalCreateRunRequestToolChoice : IEquatable - { - private readonly string _value; - - public InternalCreateRunRequestToolChoice(string value) - { - _value = value ?? throw new ArgumentNullException(nameof(value)); - } - - private const string NoneValue = "none"; - private const string AutoValue = "auto"; - private const string RequiredValue = "required"; - - public static InternalCreateRunRequestToolChoice None { get; } = new InternalCreateRunRequestToolChoice(NoneValue); - public static InternalCreateRunRequestToolChoice Auto { get; } = new InternalCreateRunRequestToolChoice(AutoValue); - public static InternalCreateRunRequestToolChoice Required { get; } = new InternalCreateRunRequestToolChoice(RequiredValue); - public static bool operator ==(InternalCreateRunRequestToolChoice left, InternalCreateRunRequestToolChoice right) => left.Equals(right); - public static bool operator !=(InternalCreateRunRequestToolChoice left, InternalCreateRunRequestToolChoice right) => !left.Equals(right); - public static implicit operator InternalCreateRunRequestToolChoice(string value) => new InternalCreateRunRequestToolChoice(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateRunRequestToolChoice other && Equals(other); - public bool Equals(InternalCreateRunRequestToolChoice other) => string.Equals(_value, other._value, StringComparison.InvariantCultureIgnoreCase); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override int GetHashCode() => _value != null ? StringComparer.InvariantCultureIgnoreCase.GetHashCode(_value) : 0; - public override string ToString() => _value; - } -} diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequest.Serialization.cs b/src/Generated/Models/InternalCreateThreadAndRunRequest.Serialization.cs index 3c826f8aa..c6de8e92b 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequest.Serialization.cs @@ -21,14 +21,17 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - writer.WritePropertyName("assistant_id"u8); - writer.WriteStringValue(AssistantId); - if (Optional.IsDefined(Thread)) + if (SerializedAdditionalRawData?.ContainsKey("assistant_id") != true) + { + writer.WritePropertyName("assistant_id"u8); + writer.WriteStringValue(AssistantId); + } + if (SerializedAdditionalRawData?.ContainsKey("thread") != true && Optional.IsDefined(Thread)) { writer.WritePropertyName("thread"u8); writer.WriteObjectValue(Thread, options); } - if (Optional.IsDefined(Model)) + if (SerializedAdditionalRawData?.ContainsKey("model") != true && Optional.IsDefined(Model)) { if (Model != null) { @@ -40,7 +43,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("model"); } } - if (Optional.IsDefined(Instructions)) + if (SerializedAdditionalRawData?.ContainsKey("instructions") != true && Optional.IsDefined(Instructions)) { if (Instructions != null) { @@ -52,7 +55,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("instructions"); } } - if (Optional.IsCollectionDefined(Tools)) + if (SerializedAdditionalRawData?.ContainsKey("tools") != true && Optional.IsCollectionDefined(Tools)) { if (Tools != null) { @@ -69,7 +72,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("tools"); } } - if (Optional.IsDefined(ToolResources)) + if (SerializedAdditionalRawData?.ContainsKey("tool_resources") != true && Optional.IsDefined(ToolResources)) { if (ToolResources != null) { @@ -81,7 +84,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("tool_resources"); } } - if (Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true && Optional.IsCollectionDefined(Metadata)) { if (Metadata != null) { @@ -99,7 +102,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("metadata"); } } - if (Optional.IsDefined(Temperature)) + if (SerializedAdditionalRawData?.ContainsKey("temperature") != true && Optional.IsDefined(Temperature)) { if (Temperature != null) { @@ -111,7 +114,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("temperature"); } } - if (Optional.IsDefined(TopP)) + if (SerializedAdditionalRawData?.ContainsKey("top_p") != true && Optional.IsDefined(TopP)) { if (TopP != null) { @@ -123,7 +126,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("top_p"); } } - if (Optional.IsDefined(Stream)) + if (SerializedAdditionalRawData?.ContainsKey("stream") != true && Optional.IsDefined(Stream)) { if (Stream != null) { @@ -135,7 +138,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("stream"); } } - if (Optional.IsDefined(MaxPromptTokens)) + if (SerializedAdditionalRawData?.ContainsKey("max_prompt_tokens") != true && Optional.IsDefined(MaxPromptTokens)) { if (MaxPromptTokens != null) { @@ -147,7 +150,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("max_prompt_tokens"); } } - if (Optional.IsDefined(MaxCompletionTokens)) + if (SerializedAdditionalRawData?.ContainsKey("max_completion_tokens") != true && Optional.IsDefined(MaxCompletionTokens)) { if (MaxCompletionTokens != null) { @@ -159,7 +162,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("max_completion_tokens"); } } - if (Optional.IsDefined(TruncationStrategy)) + if (SerializedAdditionalRawData?.ContainsKey("truncation_strategy") != true && Optional.IsDefined(TruncationStrategy)) { if (TruncationStrategy != null) { @@ -171,7 +174,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("truncation_strategy"); } } - if (Optional.IsDefined(ToolChoice)) + if (SerializedAdditionalRawData?.ContainsKey("tool_choice") != true && Optional.IsDefined(ToolChoice)) { if (ToolChoice != null) { @@ -183,12 +186,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("tool_choice"); } } - if (Optional.IsDefined(ParallelToolCalls)) + if (SerializedAdditionalRawData?.ContainsKey("parallel_tool_calls") != true && Optional.IsDefined(ParallelToolCalls)) { writer.WritePropertyName("parallel_tool_calls"u8); writer.WriteBooleanValue(ParallelToolCalls.Value); } - if (Optional.IsDefined(ResponseFormat)) + if (SerializedAdditionalRawData?.ContainsKey("response_format") != true && Optional.IsDefined(ResponseFormat)) { if (ResponseFormat != null) { @@ -200,10 +203,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("response_format"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -419,8 +426,9 @@ internal static InternalCreateThreadAndRunRequest DeserializeInternalCreateThrea responseFormat = AssistantResponseFormat.DeserializeAssistantResponseFormat(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequest.cs b/src/Generated/Models/InternalCreateThreadAndRunRequest.cs index 63980b824..5e50cf643 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequest.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequest.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalCreateThreadAndRunRequest { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateThreadAndRunRequest(string assistantId) { Argument.AssertNotNull(assistantId, nameof(assistantId)); @@ -38,7 +37,7 @@ internal InternalCreateThreadAndRunRequest(string assistantId, ThreadCreationOpt ToolChoice = toolChoice; ParallelToolCalls = parallelToolCalls; ResponseFormat = responseFormat; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateThreadAndRunRequest() diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestResponseFormat.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestResponseFormat.cs new file mode 100644 index 000000000..e268b7603 --- /dev/null +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestResponseFormat.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; + +namespace OpenAI.Assistants +{ + internal readonly partial struct InternalCreateThreadAndRunRequestResponseFormat : IEquatable + { + private readonly string _value; + + public InternalCreateThreadAndRunRequestResponseFormat(string value) + { + _value = value ?? throw new ArgumentNullException(nameof(value)); + } + + private const string NoneValue = "none"; + private const string AutoValue = "auto"; + + public static InternalCreateThreadAndRunRequestResponseFormat None { get; } = new InternalCreateThreadAndRunRequestResponseFormat(NoneValue); + public static InternalCreateThreadAndRunRequestResponseFormat Auto { get; } = new InternalCreateThreadAndRunRequestResponseFormat(AutoValue); + public static bool operator ==(InternalCreateThreadAndRunRequestResponseFormat left, InternalCreateThreadAndRunRequestResponseFormat right) => left.Equals(right); + public static bool operator !=(InternalCreateThreadAndRunRequestResponseFormat left, InternalCreateThreadAndRunRequestResponseFormat right) => !left.Equals(right); + public static implicit operator InternalCreateThreadAndRunRequestResponseFormat(string value) => new InternalCreateThreadAndRunRequestResponseFormat(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalCreateThreadAndRunRequestResponseFormat other && Equals(other); + public bool Equals(InternalCreateThreadAndRunRequestResponseFormat other) => string.Equals(_value, other._value, StringComparison.InvariantCultureIgnoreCase); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode() => _value != null ? StringComparer.InvariantCultureIgnoreCase.GetHashCode(_value) : 0; + public override string ToString() => _value; + } +} diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestToolChoice.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestToolChoice.cs new file mode 100644 index 000000000..45a467b3c --- /dev/null +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestToolChoice.cs @@ -0,0 +1,38 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; + +namespace OpenAI.Assistants +{ + internal readonly partial struct InternalCreateThreadAndRunRequestToolChoice : IEquatable + { + private readonly string _value; + + public InternalCreateThreadAndRunRequestToolChoice(string value) + { + _value = value ?? throw new ArgumentNullException(nameof(value)); + } + + private const string NoneValue = "none"; + private const string AutoValue = "auto"; + private const string RequiredValue = "required"; + + public static InternalCreateThreadAndRunRequestToolChoice None { get; } = new InternalCreateThreadAndRunRequestToolChoice(NoneValue); + public static InternalCreateThreadAndRunRequestToolChoice Auto { get; } = new InternalCreateThreadAndRunRequestToolChoice(AutoValue); + public static InternalCreateThreadAndRunRequestToolChoice Required { get; } = new InternalCreateThreadAndRunRequestToolChoice(RequiredValue); + public static bool operator ==(InternalCreateThreadAndRunRequestToolChoice left, InternalCreateThreadAndRunRequestToolChoice right) => left.Equals(right); + public static bool operator !=(InternalCreateThreadAndRunRequestToolChoice left, InternalCreateThreadAndRunRequestToolChoice right) => !left.Equals(right); + public static implicit operator InternalCreateThreadAndRunRequestToolChoice(string value) => new InternalCreateThreadAndRunRequestToolChoice(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalCreateThreadAndRunRequestToolChoice other && Equals(other); + public bool Equals(InternalCreateThreadAndRunRequestToolChoice other) => string.Equals(_value, other._value, StringComparison.InvariantCultureIgnoreCase); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode() => _value != null ? StringComparer.InvariantCultureIgnoreCase.GetHashCode(_value) : 0; + public override string ToString() => _value; + } +} diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.Serialization.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.Serialization.cs index fba646efb..75ffa5acb 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.Serialization.cs @@ -21,20 +21,24 @@ void IJsonModel.Write(Utf8JsonWr } writer.WriteStartObject(); - if (Optional.IsDefined(CodeInterpreter)) + if (SerializedAdditionalRawData?.ContainsKey("code_interpreter") != true && Optional.IsDefined(CodeInterpreter)) { writer.WritePropertyName("code_interpreter"u8); writer.WriteObjectValue(CodeInterpreter, options); } - if (Optional.IsDefined(FileSearch)) + if (SerializedAdditionalRawData?.ContainsKey("file_search") != true && Optional.IsDefined(FileSearch)) { writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -93,8 +97,9 @@ internal static InternalCreateThreadAndRunRequestToolResources DeserializeIntern fileSearch = InternalCreateThreadAndRunRequestToolResourcesFileSearch.DeserializeInternalCreateThreadAndRunRequestToolResourcesFileSearch(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.cs index d619b353b..452a48065 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalCreateThreadAndRunRequestToolResources { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateThreadAndRunRequestToolResources() { } @@ -19,7 +18,7 @@ internal InternalCreateThreadAndRunRequestToolResources(InternalCreateThreadAndR { CodeInterpreter = codeInterpreter; FileSearch = fileSearch; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.Serialization.cs index 39fb94509..b09f48971 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.W } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(FileIds)) + if (SerializedAdditionalRawData?.ContainsKey("file_ids") != true && Optional.IsCollectionDefined(FileIds)) { writer.WritePropertyName("file_ids"u8); writer.WriteStartArray(); @@ -31,10 +31,14 @@ void IJsonModel.W } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -88,8 +92,9 @@ internal static InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter De fileIds = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.cs index 24c5dfa96..ed362ab6b 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter() { FileIds = new ChangeTrackingList(); @@ -19,7 +18,7 @@ public InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter() internal InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter(IList fileIds, IDictionary serializedAdditionalRawData) { FileIds = fileIds; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IList FileIds { get; } diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesFileSearch.Serialization.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesFileSearch.Serialization.cs index 8b1911990..45cc0dc00 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesFileSearch.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesFileSearch.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write( } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(VectorStoreIds)) + if (SerializedAdditionalRawData?.ContainsKey("vector_store_ids") != true && Optional.IsCollectionDefined(VectorStoreIds)) { writer.WritePropertyName("vector_store_ids"u8); writer.WriteStartArray(); @@ -31,10 +31,14 @@ void IJsonModel.Write( } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -88,8 +92,9 @@ internal static InternalCreateThreadAndRunRequestToolResourcesFileSearch Deseria vectorStoreIds = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesFileSearch.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesFileSearch.cs index c06e84ab4..5a5c4b1f1 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesFileSearch.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesFileSearch.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalCreateThreadAndRunRequestToolResourcesFileSearch { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateThreadAndRunRequestToolResourcesFileSearch() { VectorStoreIds = new ChangeTrackingList(); @@ -19,7 +18,7 @@ public InternalCreateThreadAndRunRequestToolResourcesFileSearch() internal InternalCreateThreadAndRunRequestToolResourcesFileSearch(IList vectorStoreIds, IDictionary serializedAdditionalRawData) { VectorStoreIds = vectorStoreIds; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IList VectorStoreIds { get; } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResources.Serialization.cs b/src/Generated/Models/InternalCreateThreadRequestToolResources.Serialization.cs index 095eb2da4..80421a94b 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResources.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResources.Serialization.cs @@ -21,12 +21,12 @@ void IJsonModel.Write(Utf8JsonWriter w } writer.WriteStartObject(); - if (Optional.IsDefined(CodeInterpreter)) + if (SerializedAdditionalRawData?.ContainsKey("code_interpreter") != true && Optional.IsDefined(CodeInterpreter)) { writer.WritePropertyName("code_interpreter"u8); writer.WriteObjectValue(CodeInterpreter, options); } - if (Optional.IsDefined(FileSearch)) + if (SerializedAdditionalRawData?.ContainsKey("file_search") != true && Optional.IsDefined(FileSearch)) { writer.WritePropertyName("file_search"u8); #if NET6_0_OR_GREATER @@ -38,10 +38,14 @@ void IJsonModel.Write(Utf8JsonWriter w } #endif } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -100,8 +104,9 @@ internal static InternalCreateThreadRequestToolResources DeserializeInternalCrea fileSearch = BinaryData.FromString(property.Value.GetRawText()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResources.cs b/src/Generated/Models/InternalCreateThreadRequestToolResources.cs index f9b93c000..ca16742e9 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResources.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResources.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalCreateThreadRequestToolResources { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateThreadRequestToolResources() { } @@ -19,7 +18,7 @@ internal InternalCreateThreadRequestToolResources(InternalCreateThreadRequestToo { CodeInterpreter = codeInterpreter; FileSearch = fileSearch; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public InternalCreateThreadRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.Serialization.cs index e0ef1e613..14ae6666f 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(U } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(FileIds)) + if (SerializedAdditionalRawData?.ContainsKey("file_ids") != true && Optional.IsCollectionDefined(FileIds)) { writer.WritePropertyName("file_ids"u8); writer.WriteStartArray(); @@ -31,10 +31,14 @@ void IJsonModel.Write(U } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -88,8 +92,9 @@ internal static InternalCreateThreadRequestToolResourcesCodeInterpreter Deserial fileIds = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.cs index e5eb3434d..df61d7ce5 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalCreateThreadRequestToolResourcesCodeInterpreter { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateThreadRequestToolResourcesCodeInterpreter() { FileIds = new ChangeTrackingList(); @@ -19,7 +18,7 @@ public InternalCreateThreadRequestToolResourcesCodeInterpreter() internal InternalCreateThreadRequestToolResourcesCodeInterpreter(IList fileIds, IDictionary serializedAdditionalRawData) { FileIds = fileIds; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IList FileIds { get; } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.Serialization.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.Serialization.cs index 25d485447..245728135 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.Serialization.cs @@ -21,10 +21,14 @@ void IJsonModel.Write(Ut } writer.WriteStartObject(); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -63,8 +67,9 @@ internal static InternalCreateThreadRequestToolResourcesFileSearchBase Deseriali Dictionary rawDataDictionary = new Dictionary(); foreach (var property in element.EnumerateObject()) { - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.cs index a939d47aa..4a84b73f5 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.cs @@ -9,15 +9,14 @@ namespace OpenAI.Assistants { internal partial class InternalCreateThreadRequestToolResourcesFileSearchBase { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateThreadRequestToolResourcesFileSearchBase() { } internal InternalCreateThreadRequestToolResourcesFileSearchBase(IDictionary serializedAdditionalRawData) { - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } } } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpers.Serialization.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpers.Serialization.cs index 47bd2842e..8a6f56a1a 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpers.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpers.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpers.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpers.cs index d5e79c1a1..f1854538c 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpers.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpers.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpers { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpers() { VectorStores = new ChangeTrackingList(); @@ -19,7 +18,7 @@ public InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelp internal InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpers(IList vectorStores, IDictionary serializedAdditionalRawData) { VectorStores = vectorStores; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IList VectorStores { get; } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpersVectorStore.Serialization.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpersVectorStore.Serialization.cs index 41fdb6729..383f85c6f 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpersVectorStore.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpersVectorStore.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpersVectorStore.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpersVectorStore.cs index 304e2af03..430b2c563 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpersVectorStore.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpersVectorStore.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpersVectorStore { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHelpersVectorStore() { FileIds = new ChangeTrackingList(); @@ -21,7 +20,7 @@ internal InternalCreateThreadRequestToolResourcesFileSearchVectorStoreCreationHe { FileIds = fileIds; Metadata = metadata; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IList FileIds { get; } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreIdReferences.Serialization.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreIdReferences.Serialization.cs index 7714c87fa..0b1774eb4 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreIdReferences.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreIdReferences.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreIdReferences.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreIdReferences.cs index ee58c3e5f..140500897 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreIdReferences.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchVectorStoreIdReferences.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalCreateThreadRequestToolResourcesFileSearchVectorStoreIdReferences { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateThreadRequestToolResourcesFileSearchVectorStoreIdReferences() { VectorStoreIds = new ChangeTrackingList(); @@ -19,7 +18,7 @@ public InternalCreateThreadRequestToolResourcesFileSearchVectorStoreIdReferences internal InternalCreateThreadRequestToolResourcesFileSearchVectorStoreIdReferences(IList vectorStoreIds, IDictionary serializedAdditionalRawData) { VectorStoreIds = vectorStoreIds; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IList VectorStoreIds { get; } diff --git a/src/Generated/Models/InternalCreateTranscriptionResponseJson.Serialization.cs b/src/Generated/Models/InternalCreateTranscriptionResponseJson.Serialization.cs index 5f5b2c709..12dfb77ff 100644 --- a/src/Generated/Models/InternalCreateTranscriptionResponseJson.Serialization.cs +++ b/src/Generated/Models/InternalCreateTranscriptionResponseJson.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter wr } writer.WriteStartObject(); - writer.WritePropertyName("text"u8); - writer.WriteStringValue(Text); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("text") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static InternalCreateTranscriptionResponseJson DeserializeInternalCreat text = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateTranscriptionResponseJson.cs b/src/Generated/Models/InternalCreateTranscriptionResponseJson.cs index 6493fbd35..19818f1d1 100644 --- a/src/Generated/Models/InternalCreateTranscriptionResponseJson.cs +++ b/src/Generated/Models/InternalCreateTranscriptionResponseJson.cs @@ -9,8 +9,7 @@ namespace OpenAI.Audio { internal partial class InternalCreateTranscriptionResponseJson { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalCreateTranscriptionResponseJson(string text) { Argument.AssertNotNull(text, nameof(text)); @@ -21,7 +20,7 @@ internal InternalCreateTranscriptionResponseJson(string text) internal InternalCreateTranscriptionResponseJson(string text, IDictionary serializedAdditionalRawData) { Text = text; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateTranscriptionResponseJson() diff --git a/src/Generated/Models/InternalCreateTranslationResponseJson.Serialization.cs b/src/Generated/Models/InternalCreateTranslationResponseJson.Serialization.cs index 5ccec66c3..cff7b1f89 100644 --- a/src/Generated/Models/InternalCreateTranslationResponseJson.Serialization.cs +++ b/src/Generated/Models/InternalCreateTranslationResponseJson.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writ } writer.WriteStartObject(); - writer.WritePropertyName("text"u8); - writer.WriteStringValue(Text); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("text") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static InternalCreateTranslationResponseJson DeserializeInternalCreateT text = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateTranslationResponseJson.cs b/src/Generated/Models/InternalCreateTranslationResponseJson.cs index aedc4317f..e6e9dae14 100644 --- a/src/Generated/Models/InternalCreateTranslationResponseJson.cs +++ b/src/Generated/Models/InternalCreateTranslationResponseJson.cs @@ -9,8 +9,7 @@ namespace OpenAI.Audio { internal partial class InternalCreateTranslationResponseJson { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalCreateTranslationResponseJson(string text) { Argument.AssertNotNull(text, nameof(text)); @@ -21,7 +20,7 @@ internal InternalCreateTranslationResponseJson(string text) internal InternalCreateTranslationResponseJson(string text, IDictionary serializedAdditionalRawData) { Text = text; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateTranslationResponseJson() diff --git a/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.Serialization.cs b/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.Serialization.cs index bd173b9ff..423f063ad 100644 --- a/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.Serialization.cs @@ -21,14 +21,17 @@ void IJsonModel.Write(Utf8JsonWriter } writer.WriteStartObject(); - writer.WritePropertyName("file_ids"u8); - writer.WriteStartArray(); - foreach (var item in FileIds) + if (SerializedAdditionalRawData?.ContainsKey("file_ids") != true) { - writer.WriteStringValue(item); + writer.WritePropertyName("file_ids"u8); + writer.WriteStartArray(); + foreach (var item in FileIds) + { + writer.WriteStringValue(item); + } + writer.WriteEndArray(); } - writer.WriteEndArray(); - if (Optional.IsDefined(ChunkingStrategy)) + if (SerializedAdditionalRawData?.ContainsKey("chunking_strategy") != true && Optional.IsDefined(ChunkingStrategy)) { writer.WritePropertyName("chunking_strategy"u8); #if NET6_0_OR_GREATER @@ -40,10 +43,14 @@ void IJsonModel.Write(Utf8JsonWriter } #endif } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -103,8 +110,9 @@ internal static InternalCreateVectorStoreFileBatchRequest DeserializeInternalCre chunkingStrategy = BinaryData.FromString(property.Value.GetRawText()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.cs b/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.cs index d0bd0d831..3064e3505 100644 --- a/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.cs +++ b/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.cs @@ -10,8 +10,7 @@ namespace OpenAI.VectorStores { internal partial class InternalCreateVectorStoreFileBatchRequest { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateVectorStoreFileBatchRequest(IEnumerable fileIds) { Argument.AssertNotNull(fileIds, nameof(fileIds)); @@ -23,7 +22,7 @@ internal InternalCreateVectorStoreFileBatchRequest(IList fileIds, Binary { FileIds = fileIds; ChunkingStrategy = chunkingStrategy; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateVectorStoreFileBatchRequest() diff --git a/src/Generated/Models/InternalCreateVectorStoreFileRequest.Serialization.cs b/src/Generated/Models/InternalCreateVectorStoreFileRequest.Serialization.cs index 72f7af320..57c6c8a14 100644 --- a/src/Generated/Models/InternalCreateVectorStoreFileRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateVectorStoreFileRequest.Serialization.cs @@ -21,17 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter write } writer.WriteStartObject(); - writer.WritePropertyName("file_id"u8); - writer.WriteStringValue(FileId); - if (Optional.IsDefined(ChunkingStrategy)) + if (SerializedAdditionalRawData?.ContainsKey("file_id") != true) + { + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + if (SerializedAdditionalRawData?.ContainsKey("chunking_strategy") != true && Optional.IsDefined(ChunkingStrategy)) { writer.WritePropertyName("chunking_strategy"u8); writer.WriteObjectValue(ChunkingStrategy, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -86,8 +93,9 @@ internal static InternalCreateVectorStoreFileRequest DeserializeInternalCreateVe chunkingStrategy = FileChunkingStrategy.DeserializeFileChunkingStrategy(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalCreateVectorStoreFileRequest.cs b/src/Generated/Models/InternalCreateVectorStoreFileRequest.cs index 0aaf19fc7..4224f5fca 100644 --- a/src/Generated/Models/InternalCreateVectorStoreFileRequest.cs +++ b/src/Generated/Models/InternalCreateVectorStoreFileRequest.cs @@ -9,8 +9,7 @@ namespace OpenAI.VectorStores { internal partial class InternalCreateVectorStoreFileRequest { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalCreateVectorStoreFileRequest(string fileId) { Argument.AssertNotNull(fileId, nameof(fileId)); @@ -22,7 +21,7 @@ internal InternalCreateVectorStoreFileRequest(string fileId, FileChunkingStrateg { FileId = fileId; ChunkingStrategy = chunkingStrategy; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalCreateVectorStoreFileRequest() diff --git a/src/Generated/Models/InternalDeleteAssistantResponse.Serialization.cs b/src/Generated/Models/InternalDeleteAssistantResponse.Serialization.cs index 57798a40f..823c704a3 100644 --- a/src/Generated/Models/InternalDeleteAssistantResponse.Serialization.cs +++ b/src/Generated/Models/InternalDeleteAssistantResponse.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("deleted"u8); - writer.WriteBooleanValue(Deleted); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("deleted") != true) + { + writer.WritePropertyName("deleted"u8); + writer.WriteBooleanValue(Deleted); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalDeleteAssistantResponse DeserializeInternalDeleteAssista @object = new InternalDeleteAssistantResponseObject(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalDeleteAssistantResponse.cs b/src/Generated/Models/InternalDeleteAssistantResponse.cs index 12928f339..804997b70 100644 --- a/src/Generated/Models/InternalDeleteAssistantResponse.cs +++ b/src/Generated/Models/InternalDeleteAssistantResponse.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalDeleteAssistantResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalDeleteAssistantResponse(string id, bool deleted) { Argument.AssertNotNull(id, nameof(id)); @@ -24,7 +23,7 @@ internal InternalDeleteAssistantResponse(string id, bool deleted, InternalDelete Id = id; Deleted = deleted; Object = @object; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalDeleteAssistantResponse() diff --git a/src/Generated/Models/InternalDeleteFileResponse.Serialization.cs b/src/Generated/Models/InternalDeleteFileResponse.Serialization.cs index 2b3fdf312..9a4ebc340 100644 --- a/src/Generated/Models/InternalDeleteFileResponse.Serialization.cs +++ b/src/Generated/Models/InternalDeleteFileResponse.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("deleted"u8); - writer.WriteBooleanValue(Deleted); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("deleted") != true) + { + writer.WritePropertyName("deleted"u8); + writer.WriteBooleanValue(Deleted); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalDeleteFileResponse DeserializeInternalDeleteFileResponse deleted = property.Value.GetBoolean(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalDeleteFileResponse.cs b/src/Generated/Models/InternalDeleteFileResponse.cs index 8adbb95fc..20d559dcd 100644 --- a/src/Generated/Models/InternalDeleteFileResponse.cs +++ b/src/Generated/Models/InternalDeleteFileResponse.cs @@ -9,8 +9,7 @@ namespace OpenAI.Files { internal partial class InternalDeleteFileResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalDeleteFileResponse(string id, bool deleted) { Argument.AssertNotNull(id, nameof(id)); @@ -24,7 +23,7 @@ internal InternalDeleteFileResponse(string id, InternalDeleteFileResponseObject Id = id; Object = @object; Deleted = deleted; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalDeleteFileResponse() diff --git a/src/Generated/Models/InternalDeleteMessageResponse.Serialization.cs b/src/Generated/Models/InternalDeleteMessageResponse.Serialization.cs index 11b46f7e8..b79356a29 100644 --- a/src/Generated/Models/InternalDeleteMessageResponse.Serialization.cs +++ b/src/Generated/Models/InternalDeleteMessageResponse.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mode } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("deleted"u8); - writer.WriteBooleanValue(Deleted); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("deleted") != true) + { + writer.WritePropertyName("deleted"u8); + writer.WriteBooleanValue(Deleted); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalDeleteMessageResponse DeserializeInternalDeleteMessageRe @object = new InternalDeleteMessageResponseObject(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalDeleteMessageResponse.cs b/src/Generated/Models/InternalDeleteMessageResponse.cs index f3880e986..98cad7c8d 100644 --- a/src/Generated/Models/InternalDeleteMessageResponse.cs +++ b/src/Generated/Models/InternalDeleteMessageResponse.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalDeleteMessageResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalDeleteMessageResponse(string id, bool deleted) { Argument.AssertNotNull(id, nameof(id)); @@ -24,7 +23,7 @@ internal InternalDeleteMessageResponse(string id, bool deleted, InternalDeleteMe Id = id; Deleted = deleted; Object = @object; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalDeleteMessageResponse() diff --git a/src/Generated/Models/InternalDeleteModelResponse.Serialization.cs b/src/Generated/Models/InternalDeleteModelResponse.Serialization.cs index 2a6d1baf7..e8c92cc81 100644 --- a/src/Generated/Models/InternalDeleteModelResponse.Serialization.cs +++ b/src/Generated/Models/InternalDeleteModelResponse.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("deleted"u8); - writer.WriteBooleanValue(Deleted); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("deleted") != true) + { + writer.WritePropertyName("deleted"u8); + writer.WriteBooleanValue(Deleted); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalDeleteModelResponse DeserializeInternalDeleteModelRespon @object = new InternalDeleteModelResponseObject(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalDeleteModelResponse.cs b/src/Generated/Models/InternalDeleteModelResponse.cs index d4ed689d4..2b9c6561d 100644 --- a/src/Generated/Models/InternalDeleteModelResponse.cs +++ b/src/Generated/Models/InternalDeleteModelResponse.cs @@ -9,8 +9,7 @@ namespace OpenAI.Models { internal partial class InternalDeleteModelResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalDeleteModelResponse(string id, bool deleted) { Argument.AssertNotNull(id, nameof(id)); @@ -24,7 +23,7 @@ internal InternalDeleteModelResponse(string id, bool deleted, InternalDeleteMode Id = id; Deleted = deleted; Object = @object; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalDeleteModelResponse() diff --git a/src/Generated/Models/InternalDeleteThreadResponse.Serialization.cs b/src/Generated/Models/InternalDeleteThreadResponse.Serialization.cs index f421a46f4..5e38bede5 100644 --- a/src/Generated/Models/InternalDeleteThreadResponse.Serialization.cs +++ b/src/Generated/Models/InternalDeleteThreadResponse.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("deleted"u8); - writer.WriteBooleanValue(Deleted); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("deleted") != true) + { + writer.WritePropertyName("deleted"u8); + writer.WriteBooleanValue(Deleted); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalDeleteThreadResponse DeserializeInternalDeleteThreadResp @object = new InternalDeleteThreadResponseObject(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalDeleteThreadResponse.cs b/src/Generated/Models/InternalDeleteThreadResponse.cs index 6d2663a40..983dc8adb 100644 --- a/src/Generated/Models/InternalDeleteThreadResponse.cs +++ b/src/Generated/Models/InternalDeleteThreadResponse.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalDeleteThreadResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalDeleteThreadResponse(string id, bool deleted) { Argument.AssertNotNull(id, nameof(id)); @@ -24,7 +23,7 @@ internal InternalDeleteThreadResponse(string id, bool deleted, InternalDeleteThr Id = id; Deleted = deleted; Object = @object; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalDeleteThreadResponse() diff --git a/src/Generated/Models/InternalDeleteVectorStoreFileResponse.Serialization.cs b/src/Generated/Models/InternalDeleteVectorStoreFileResponse.Serialization.cs index 2af70be18..d09608f91 100644 --- a/src/Generated/Models/InternalDeleteVectorStoreFileResponse.Serialization.cs +++ b/src/Generated/Models/InternalDeleteVectorStoreFileResponse.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writ } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("deleted"u8); - writer.WriteBooleanValue(Deleted); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("deleted") != true) + { + writer.WritePropertyName("deleted"u8); + writer.WriteBooleanValue(Deleted); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalDeleteVectorStoreFileResponse DeserializeInternalDeleteV @object = new InternalDeleteVectorStoreFileResponseObject(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalDeleteVectorStoreFileResponse.cs b/src/Generated/Models/InternalDeleteVectorStoreFileResponse.cs index a1d6800cd..bf3150d47 100644 --- a/src/Generated/Models/InternalDeleteVectorStoreFileResponse.cs +++ b/src/Generated/Models/InternalDeleteVectorStoreFileResponse.cs @@ -9,8 +9,7 @@ namespace OpenAI.VectorStores { internal partial class InternalDeleteVectorStoreFileResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalDeleteVectorStoreFileResponse(string id, bool deleted) { Argument.AssertNotNull(id, nameof(id)); @@ -24,7 +23,7 @@ internal InternalDeleteVectorStoreFileResponse(string id, bool deleted, Internal Id = id; Deleted = deleted; Object = @object; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalDeleteVectorStoreFileResponse() diff --git a/src/Generated/Models/InternalDeleteVectorStoreResponse.Serialization.cs b/src/Generated/Models/InternalDeleteVectorStoreResponse.Serialization.cs index 4c980341d..a0bd186ef 100644 --- a/src/Generated/Models/InternalDeleteVectorStoreResponse.Serialization.cs +++ b/src/Generated/Models/InternalDeleteVectorStoreResponse.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("deleted"u8); - writer.WriteBooleanValue(Deleted); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("deleted") != true) + { + writer.WritePropertyName("deleted"u8); + writer.WriteBooleanValue(Deleted); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalDeleteVectorStoreResponse DeserializeInternalDeleteVecto @object = new InternalDeleteVectorStoreResponseObject(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalDeleteVectorStoreResponse.cs b/src/Generated/Models/InternalDeleteVectorStoreResponse.cs index 4fd992658..d90d30171 100644 --- a/src/Generated/Models/InternalDeleteVectorStoreResponse.cs +++ b/src/Generated/Models/InternalDeleteVectorStoreResponse.cs @@ -9,8 +9,7 @@ namespace OpenAI.VectorStores { internal partial class InternalDeleteVectorStoreResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalDeleteVectorStoreResponse(string id, bool deleted) { Argument.AssertNotNull(id, nameof(id)); @@ -24,7 +23,7 @@ internal InternalDeleteVectorStoreResponse(string id, bool deleted, InternalDele Id = id; Deleted = deleted; Object = @object; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalDeleteVectorStoreResponse() diff --git a/src/Generated/Models/InternalFileChunkingStrategyRequestParam.Serialization.cs b/src/Generated/Models/InternalFileChunkingStrategyRequestParam.Serialization.cs index a203498c5..4a61d2d17 100644 --- a/src/Generated/Models/InternalFileChunkingStrategyRequestParam.Serialization.cs +++ b/src/Generated/Models/InternalFileChunkingStrategyRequestParam.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter w } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); diff --git a/src/Generated/Models/InternalFileChunkingStrategyRequestParam.cs b/src/Generated/Models/InternalFileChunkingStrategyRequestParam.cs index 0ecf2703b..275a076ed 100644 --- a/src/Generated/Models/InternalFileChunkingStrategyRequestParam.cs +++ b/src/Generated/Models/InternalFileChunkingStrategyRequestParam.cs @@ -9,8 +9,7 @@ namespace OpenAI.VectorStores { internal abstract partial class InternalFileChunkingStrategyRequestParam { - private protected IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } protected InternalFileChunkingStrategyRequestParam() { } @@ -18,7 +17,7 @@ protected InternalFileChunkingStrategyRequestParam() internal InternalFileChunkingStrategyRequestParam(string type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal string Type { get; set; } diff --git a/src/Generated/Models/InternalFileUploadOptions.Serialization.cs b/src/Generated/Models/InternalFileUploadOptions.Serialization.cs index 26c7977bb..9faa8aebf 100644 --- a/src/Generated/Models/InternalFileUploadOptions.Serialization.cs +++ b/src/Generated/Models/InternalFileUploadOptions.Serialization.cs @@ -22,21 +22,31 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea } writer.WriteStartObject(); - writer.WritePropertyName("file"u8); + if (SerializedAdditionalRawData?.ContainsKey("file") != true) + { + writer.WritePropertyName("file"u8); #if NET6_0_OR_GREATER writer.WriteRawValue(global::System.BinaryData.FromStream(File)); #else - using (JsonDocument document = JsonDocument.Parse(BinaryData.FromStream(File))) + using (JsonDocument document = JsonDocument.Parse(BinaryData.FromStream(File))) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (SerializedAdditionalRawData?.ContainsKey("purpose") != true) { - JsonSerializer.Serialize(writer, document.RootElement); + writer.WritePropertyName("purpose"u8); + writer.WriteStringValue(Purpose.ToString()); } -#endif - writer.WritePropertyName("purpose"u8); - writer.WriteStringValue(Purpose.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +97,9 @@ internal static InternalFileUploadOptions DeserializeInternalFileUploadOptions(J purpose = new FileUploadPurpose(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalFileUploadOptions.cs b/src/Generated/Models/InternalFileUploadOptions.cs index 2cb211b2b..7873ae62e 100644 --- a/src/Generated/Models/InternalFileUploadOptions.cs +++ b/src/Generated/Models/InternalFileUploadOptions.cs @@ -10,13 +10,13 @@ namespace OpenAI.Files { internal partial class InternalFileUploadOptions { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalFileUploadOptions(Stream file, FileUploadPurpose purpose, IDictionary serializedAdditionalRawData) { File = file; Purpose = purpose; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } } } diff --git a/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.Serialization.cs b/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.Serialization.cs index b694ee2d1..95b63ec49 100644 --- a/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.Serialization.cs +++ b/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.Serialization.cs @@ -22,12 +22,12 @@ void IJsonModel.Write(Utf } writer.WriteStartObject(); - if (Optional.IsDefined(ParticipantName)) + if (SerializedAdditionalRawData?.ContainsKey("name") != true && Optional.IsDefined(ParticipantName)) { writer.WritePropertyName("name"u8); writer.WriteStringValue(ParticipantName); } - if (Optional.IsCollectionDefined(ToolCalls)) + if (SerializedAdditionalRawData?.ContainsKey("tool_calls") != true && Optional.IsCollectionDefined(ToolCalls)) { writer.WritePropertyName("tool_calls"u8); writer.WriteStartArray(); @@ -37,7 +37,7 @@ void IJsonModel.Write(Utf } writer.WriteEndArray(); } - if (Optional.IsDefined(FunctionCall)) + if (SerializedAdditionalRawData?.ContainsKey("function_call") != true && Optional.IsDefined(FunctionCall)) { if (FunctionCall != null) { @@ -49,17 +49,24 @@ void IJsonModel.Write(Utf writer.WriteNull("function_call"); } } - writer.WritePropertyName("role"u8); - writer.WriteStringValue(Role); - if (Optional.IsCollectionDefined(Content)) + if (SerializedAdditionalRawData?.ContainsKey("role") != true) + { + writer.WritePropertyName("role"u8); + writer.WriteStringValue(Role); + } + if (SerializedAdditionalRawData?.ContainsKey("content") != true && Optional.IsCollectionDefined(Content)) { writer.WritePropertyName("content"u8); SerializeContentValue(writer, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -142,8 +149,9 @@ internal static InternalFineTuneChatCompletionRequestAssistantMessage Deserializ DeserializeContentValue(property, ref content); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalFineTuningIntegration.Serialization.cs b/src/Generated/Models/InternalFineTuningIntegration.Serialization.cs index add5d54c8..89653288f 100644 --- a/src/Generated/Models/InternalFineTuningIntegration.Serialization.cs +++ b/src/Generated/Models/InternalFineTuningIntegration.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mode } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - writer.WritePropertyName("wandb"u8); - writer.WriteObjectValue(Wandb, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("wandb") != true) + { + writer.WritePropertyName("wandb"u8); + writer.WriteObjectValue(Wandb, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static InternalFineTuningIntegration DeserializeInternalFineTuningInteg wandb = InternalFineTuningIntegrationWandb.DeserializeInternalFineTuningIntegrationWandb(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalFineTuningIntegration.cs b/src/Generated/Models/InternalFineTuningIntegration.cs index f9113e3da..36288d789 100644 --- a/src/Generated/Models/InternalFineTuningIntegration.cs +++ b/src/Generated/Models/InternalFineTuningIntegration.cs @@ -9,8 +9,7 @@ namespace OpenAI.FineTuning { internal partial class InternalFineTuningIntegration { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalFineTuningIntegration(InternalFineTuningIntegrationWandb wandb) { Argument.AssertNotNull(wandb, nameof(wandb)); @@ -22,7 +21,7 @@ internal InternalFineTuningIntegration(InternalFineTuningIntegrationType type, I { Type = type; Wandb = wandb; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalFineTuningIntegration() diff --git a/src/Generated/Models/InternalFineTuningIntegrationWandb.Serialization.cs b/src/Generated/Models/InternalFineTuningIntegrationWandb.Serialization.cs index ae6d1ce78..814b95ddc 100644 --- a/src/Generated/Models/InternalFineTuningIntegrationWandb.Serialization.cs +++ b/src/Generated/Models/InternalFineTuningIntegrationWandb.Serialization.cs @@ -21,9 +21,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - writer.WritePropertyName("project"u8); - writer.WriteStringValue(Project); - if (Optional.IsDefined(Name)) + if (SerializedAdditionalRawData?.ContainsKey("project") != true) + { + writer.WritePropertyName("project"u8); + writer.WriteStringValue(Project); + } + if (SerializedAdditionalRawData?.ContainsKey("name") != true && Optional.IsDefined(Name)) { if (Name != null) { @@ -35,7 +38,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("name"); } } - if (Optional.IsDefined(Entity)) + if (SerializedAdditionalRawData?.ContainsKey("entity") != true && Optional.IsDefined(Entity)) { if (Entity != null) { @@ -47,7 +50,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteNull("entity"); } } - if (Optional.IsCollectionDefined(Tags)) + if (SerializedAdditionalRawData?.ContainsKey("tags") != true && Optional.IsCollectionDefined(Tags)) { writer.WritePropertyName("tags"u8); writer.WriteStartArray(); @@ -57,10 +60,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -142,8 +149,9 @@ internal static InternalFineTuningIntegrationWandb DeserializeInternalFineTuning tags = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalFineTuningIntegrationWandb.cs b/src/Generated/Models/InternalFineTuningIntegrationWandb.cs index 63740e49b..c7dba57b6 100644 --- a/src/Generated/Models/InternalFineTuningIntegrationWandb.cs +++ b/src/Generated/Models/InternalFineTuningIntegrationWandb.cs @@ -9,8 +9,7 @@ namespace OpenAI.FineTuning { internal partial class InternalFineTuningIntegrationWandb { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalFineTuningIntegrationWandb(string project) { Argument.AssertNotNull(project, nameof(project)); @@ -25,7 +24,7 @@ internal InternalFineTuningIntegrationWandb(string project, string name, string Name = name; Entity = entity; Tags = tags; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalFineTuningIntegrationWandb() diff --git a/src/Generated/Models/InternalFineTuningJob.Serialization.cs b/src/Generated/Models/InternalFineTuningJob.Serialization.cs index 71e4bb5d9..a97bc5537 100644 --- a/src/Generated/Models/InternalFineTuningJob.Serialization.cs +++ b/src/Generated/Models/InternalFineTuningJob.Serialization.cs @@ -21,75 +21,117 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - if (Error != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - writer.WritePropertyName("error"u8); - writer.WriteObjectValue(Error, options); + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); } - else + if (SerializedAdditionalRawData?.ContainsKey("created_at") != true) { - writer.WriteNull("error"); + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); } - if (FineTunedModel != null) + if (SerializedAdditionalRawData?.ContainsKey("error") != true) { - writer.WritePropertyName("fine_tuned_model"u8); - writer.WriteStringValue(FineTunedModel); + if (Error != null) + { + writer.WritePropertyName("error"u8); + writer.WriteObjectValue(Error, options); + } + else + { + writer.WriteNull("error"); + } + } + if (SerializedAdditionalRawData?.ContainsKey("fine_tuned_model") != true) + { + if (FineTunedModel != null) + { + writer.WritePropertyName("fine_tuned_model"u8); + writer.WriteStringValue(FineTunedModel); + } + else + { + writer.WriteNull("fine_tuned_model"); + } + } + if (SerializedAdditionalRawData?.ContainsKey("finished_at") != true) + { + if (FinishedAt != null) + { + writer.WritePropertyName("finished_at"u8); + writer.WriteNumberValue(FinishedAt.Value, "U"); + } + else + { + writer.WriteNull("finished_at"); + } } - else + if (SerializedAdditionalRawData?.ContainsKey("hyperparameters") != true) { - writer.WriteNull("fine_tuned_model"); + writer.WritePropertyName("hyperparameters"u8); + writer.WriteObjectValue(Hyperparameters, options); } - if (FinishedAt != null) + if (SerializedAdditionalRawData?.ContainsKey("model") != true) { - writer.WritePropertyName("finished_at"u8); - writer.WriteNumberValue(FinishedAt.Value, "U"); + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); } - else + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - writer.WriteNull("finished_at"); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - writer.WritePropertyName("hyperparameters"u8); - writer.WriteObjectValue(Hyperparameters, options); - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("organization_id"u8); - writer.WriteStringValue(OrganizationId); - writer.WritePropertyName("result_files"u8); - writer.WriteStartArray(); - foreach (var item in ResultFiles) + if (SerializedAdditionalRawData?.ContainsKey("organization_id") != true) { - writer.WriteStringValue(item); + writer.WritePropertyName("organization_id"u8); + writer.WriteStringValue(OrganizationId); } - writer.WriteEndArray(); - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.ToString()); - if (TrainedTokens != null) + if (SerializedAdditionalRawData?.ContainsKey("result_files") != true) { - writer.WritePropertyName("trained_tokens"u8); - writer.WriteNumberValue(TrainedTokens.Value); + writer.WritePropertyName("result_files"u8); + writer.WriteStartArray(); + foreach (var item in ResultFiles) + { + writer.WriteStringValue(item); + } + writer.WriteEndArray(); } - else + if (SerializedAdditionalRawData?.ContainsKey("status") != true) { - writer.WriteNull("trained_tokens"); + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToString()); } - writer.WritePropertyName("training_file"u8); - writer.WriteStringValue(TrainingFile); - if (ValidationFile != null) + if (SerializedAdditionalRawData?.ContainsKey("trained_tokens") != true) { - writer.WritePropertyName("validation_file"u8); - writer.WriteStringValue(ValidationFile); + if (TrainedTokens != null) + { + writer.WritePropertyName("trained_tokens"u8); + writer.WriteNumberValue(TrainedTokens.Value); + } + else + { + writer.WriteNull("trained_tokens"); + } } - else + if (SerializedAdditionalRawData?.ContainsKey("training_file") != true) { - writer.WriteNull("validation_file"); + writer.WritePropertyName("training_file"u8); + writer.WriteStringValue(TrainingFile); } - if (Optional.IsCollectionDefined(Integrations)) + if (SerializedAdditionalRawData?.ContainsKey("validation_file") != true) + { + if (ValidationFile != null) + { + writer.WritePropertyName("validation_file"u8); + writer.WriteStringValue(ValidationFile); + } + else + { + writer.WriteNull("validation_file"); + } + } + if (SerializedAdditionalRawData?.ContainsKey("integrations") != true && Optional.IsCollectionDefined(Integrations)) { if (Integrations != null) { @@ -106,9 +148,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("integrations"); } } - writer.WritePropertyName("seed"u8); - writer.WriteNumberValue(Seed); - if (Optional.IsDefined(EstimatedFinish)) + if (SerializedAdditionalRawData?.ContainsKey("seed") != true) + { + writer.WritePropertyName("seed"u8); + writer.WriteNumberValue(Seed); + } + if (SerializedAdditionalRawData?.ContainsKey("estimated_finish") != true && Optional.IsDefined(EstimatedFinish)) { if (EstimatedFinish != null) { @@ -120,10 +165,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("estimated_finish"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -308,8 +357,9 @@ internal static InternalFineTuningJob DeserializeInternalFineTuningJob(JsonEleme estimatedFinish = DateTimeOffset.FromUnixTimeSeconds(property.Value.GetInt64()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalFineTuningJob.cs b/src/Generated/Models/InternalFineTuningJob.cs index f8cd8cb7b..ce30e5cdd 100644 --- a/src/Generated/Models/InternalFineTuningJob.cs +++ b/src/Generated/Models/InternalFineTuningJob.cs @@ -10,8 +10,7 @@ namespace OpenAI.FineTuning { internal partial class InternalFineTuningJob { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalFineTuningJob(string id, DateTimeOffset createdAt, InternalFineTuningJobError error, string fineTunedModel, DateTimeOffset? finishedAt, InternalFineTuningJobHyperparameters hyperparameters, string model, string organizationId, IEnumerable resultFiles, InternalFineTuningJobStatus status, int? trainedTokens, string trainingFile, string validationFile, int seed) { Argument.AssertNotNull(id, nameof(id)); @@ -57,7 +56,7 @@ internal InternalFineTuningJob(string id, DateTimeOffset createdAt, InternalFine Integrations = integrations; Seed = seed; EstimatedFinish = estimatedFinish; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalFineTuningJob() diff --git a/src/Generated/Models/InternalFineTuningJobCheckpoint.Serialization.cs b/src/Generated/Models/InternalFineTuningJobCheckpoint.Serialization.cs index 957e37ab8..b2c50cd52 100644 --- a/src/Generated/Models/InternalFineTuningJobCheckpoint.Serialization.cs +++ b/src/Generated/Models/InternalFineTuningJobCheckpoint.Serialization.cs @@ -21,24 +21,49 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - writer.WritePropertyName("fine_tuned_model_checkpoint"u8); - writer.WriteStringValue(FineTunedModelCheckpoint); - writer.WritePropertyName("step_number"u8); - writer.WriteNumberValue(StepNumber); - writer.WritePropertyName("metrics"u8); - writer.WriteObjectValue(Metrics, options); - writer.WritePropertyName("fine_tuning_job_id"u8); - writer.WriteStringValue(FineTuningJobId); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (SerializedAdditionalRawData?.ContainsKey("fine_tuned_model_checkpoint") != true) + { + writer.WritePropertyName("fine_tuned_model_checkpoint"u8); + writer.WriteStringValue(FineTunedModelCheckpoint); + } + if (SerializedAdditionalRawData?.ContainsKey("step_number") != true) + { + writer.WritePropertyName("step_number"u8); + writer.WriteNumberValue(StepNumber); + } + if (SerializedAdditionalRawData?.ContainsKey("metrics") != true) + { + writer.WritePropertyName("metrics"u8); + writer.WriteObjectValue(Metrics, options); + } + if (SerializedAdditionalRawData?.ContainsKey("fine_tuning_job_id") != true) + { + writer.WritePropertyName("fine_tuning_job_id"u8); + writer.WriteStringValue(FineTuningJobId); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -119,8 +144,9 @@ internal static InternalFineTuningJobCheckpoint DeserializeInternalFineTuningJob @object = new InternalFineTuningJobCheckpointObject(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalFineTuningJobCheckpoint.cs b/src/Generated/Models/InternalFineTuningJobCheckpoint.cs index c4c1ab855..463cfd4fb 100644 --- a/src/Generated/Models/InternalFineTuningJobCheckpoint.cs +++ b/src/Generated/Models/InternalFineTuningJobCheckpoint.cs @@ -9,8 +9,7 @@ namespace OpenAI.FineTuning { internal partial class InternalFineTuningJobCheckpoint { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalFineTuningJobCheckpoint(string id, DateTimeOffset createdAt, string fineTunedModelCheckpoint, int stepNumber, InternalFineTuningJobCheckpointMetrics metrics, string fineTuningJobId) { Argument.AssertNotNull(id, nameof(id)); @@ -35,7 +34,7 @@ internal InternalFineTuningJobCheckpoint(string id, DateTimeOffset createdAt, st Metrics = metrics; FineTuningJobId = fineTuningJobId; Object = @object; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalFineTuningJobCheckpoint() diff --git a/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.Serialization.cs b/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.Serialization.cs index 5720042aa..c32d2e2c2 100644 --- a/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.Serialization.cs +++ b/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.Serialization.cs @@ -21,45 +21,49 @@ void IJsonModel.Write(Utf8JsonWriter wri } writer.WriteStartObject(); - if (Optional.IsDefined(Step)) + if (SerializedAdditionalRawData?.ContainsKey("step") != true && Optional.IsDefined(Step)) { writer.WritePropertyName("step"u8); writer.WriteNumberValue(Step.Value); } - if (Optional.IsDefined(TrainLoss)) + if (SerializedAdditionalRawData?.ContainsKey("train_loss") != true && Optional.IsDefined(TrainLoss)) { writer.WritePropertyName("train_loss"u8); writer.WriteNumberValue(TrainLoss.Value); } - if (Optional.IsDefined(TrainMeanTokenAccuracy)) + if (SerializedAdditionalRawData?.ContainsKey("train_mean_token_accuracy") != true && Optional.IsDefined(TrainMeanTokenAccuracy)) { writer.WritePropertyName("train_mean_token_accuracy"u8); writer.WriteNumberValue(TrainMeanTokenAccuracy.Value); } - if (Optional.IsDefined(ValidLoss)) + if (SerializedAdditionalRawData?.ContainsKey("valid_loss") != true && Optional.IsDefined(ValidLoss)) { writer.WritePropertyName("valid_loss"u8); writer.WriteNumberValue(ValidLoss.Value); } - if (Optional.IsDefined(ValidMeanTokenAccuracy)) + if (SerializedAdditionalRawData?.ContainsKey("valid_mean_token_accuracy") != true && Optional.IsDefined(ValidMeanTokenAccuracy)) { writer.WritePropertyName("valid_mean_token_accuracy"u8); writer.WriteNumberValue(ValidMeanTokenAccuracy.Value); } - if (Optional.IsDefined(FullValidLoss)) + if (SerializedAdditionalRawData?.ContainsKey("full_valid_loss") != true && Optional.IsDefined(FullValidLoss)) { writer.WritePropertyName("full_valid_loss"u8); writer.WriteNumberValue(FullValidLoss.Value); } - if (Optional.IsDefined(FullValidMeanTokenAccuracy)) + if (SerializedAdditionalRawData?.ContainsKey("full_valid_mean_token_accuracy") != true && Optional.IsDefined(FullValidMeanTokenAccuracy)) { writer.WritePropertyName("full_valid_mean_token_accuracy"u8); writer.WriteNumberValue(FullValidMeanTokenAccuracy.Value); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -168,8 +172,9 @@ internal static InternalFineTuningJobCheckpointMetrics DeserializeInternalFineTu fullValidMeanTokenAccuracy = property.Value.GetSingle(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.cs b/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.cs index 84af9988b..63c7256ec 100644 --- a/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.cs +++ b/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.cs @@ -9,8 +9,7 @@ namespace OpenAI.FineTuning { internal partial class InternalFineTuningJobCheckpointMetrics { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalFineTuningJobCheckpointMetrics() { } @@ -24,7 +23,7 @@ internal InternalFineTuningJobCheckpointMetrics(float? step, float? trainLoss, f ValidMeanTokenAccuracy = validMeanTokenAccuracy; FullValidLoss = fullValidLoss; FullValidMeanTokenAccuracy = fullValidMeanTokenAccuracy; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public float? Step { get; } diff --git a/src/Generated/Models/InternalFineTuningJobError.Serialization.cs b/src/Generated/Models/InternalFineTuningJobError.Serialization.cs index b7556d43e..d5ffe96e4 100644 --- a/src/Generated/Models/InternalFineTuningJobError.Serialization.cs +++ b/src/Generated/Models/InternalFineTuningJobError.Serialization.cs @@ -21,23 +21,36 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } writer.WriteStartObject(); - writer.WritePropertyName("code"u8); - writer.WriteStringValue(Code); - writer.WritePropertyName("message"u8); - writer.WriteStringValue(Message); - if (Param != null) + if (SerializedAdditionalRawData?.ContainsKey("code") != true) { - writer.WritePropertyName("param"u8); - writer.WriteStringValue(Param); + writer.WritePropertyName("code"u8); + writer.WriteStringValue(Code); } - else + if (SerializedAdditionalRawData?.ContainsKey("message") != true) { - writer.WriteNull("param"); + writer.WritePropertyName("message"u8); + writer.WriteStringValue(Message); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("param") != true) { - foreach (var item in _serializedAdditionalRawData) + if (Param != null) { + writer.WritePropertyName("param"u8); + writer.WriteStringValue(Param); + } + else + { + writer.WriteNull("param"); + } + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -99,8 +112,9 @@ internal static InternalFineTuningJobError DeserializeInternalFineTuningJobError param = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalFineTuningJobError.cs b/src/Generated/Models/InternalFineTuningJobError.cs index 7f9caa363..17325bf89 100644 --- a/src/Generated/Models/InternalFineTuningJobError.cs +++ b/src/Generated/Models/InternalFineTuningJobError.cs @@ -9,8 +9,7 @@ namespace OpenAI.FineTuning { internal partial class InternalFineTuningJobError { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalFineTuningJobError(string code, string message, string param) { Argument.AssertNotNull(code, nameof(code)); @@ -26,7 +25,7 @@ internal InternalFineTuningJobError(string code, string message, string param, I Code = code; Message = message; Param = param; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalFineTuningJobError() diff --git a/src/Generated/Models/InternalFineTuningJobEvent.Serialization.cs b/src/Generated/Models/InternalFineTuningJobEvent.Serialization.cs index a11f71901..35eed321a 100644 --- a/src/Generated/Models/InternalFineTuningJobEvent.Serialization.cs +++ b/src/Generated/Models/InternalFineTuningJobEvent.Serialization.cs @@ -21,20 +21,39 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - writer.WritePropertyName("level"u8); - writer.WriteStringValue(Level.ToString()); - writer.WritePropertyName("message"u8); - writer.WriteStringValue(Message); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (SerializedAdditionalRawData?.ContainsKey("level") != true) + { + writer.WritePropertyName("level"u8); + writer.WriteStringValue(Level.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("message") != true) + { + writer.WritePropertyName("message"u8); + writer.WriteStringValue(Message); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -103,8 +122,9 @@ internal static InternalFineTuningJobEvent DeserializeInternalFineTuningJobEvent @object = new InternalFineTuningJobEventObject(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalFineTuningJobEvent.cs b/src/Generated/Models/InternalFineTuningJobEvent.cs index 86c975d5b..500b4ecf1 100644 --- a/src/Generated/Models/InternalFineTuningJobEvent.cs +++ b/src/Generated/Models/InternalFineTuningJobEvent.cs @@ -9,8 +9,7 @@ namespace OpenAI.FineTuning { internal partial class InternalFineTuningJobEvent { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalFineTuningJobEvent(string id, DateTimeOffset createdAt, InternalFineTuningJobEventLevel level, string message) { Argument.AssertNotNull(id, nameof(id)); @@ -29,7 +28,7 @@ internal InternalFineTuningJobEvent(string id, DateTimeOffset createdAt, Interna Level = level; Message = message; Object = @object; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalFineTuningJobEvent() diff --git a/src/Generated/Models/InternalFineTuningJobHyperparameters.Serialization.cs b/src/Generated/Models/InternalFineTuningJobHyperparameters.Serialization.cs index ff120940a..3675a3987 100644 --- a/src/Generated/Models/InternalFineTuningJobHyperparameters.Serialization.cs +++ b/src/Generated/Models/InternalFineTuningJobHyperparameters.Serialization.cs @@ -21,19 +21,26 @@ void IJsonModel.Write(Utf8JsonWriter write } writer.WriteStartObject(); - writer.WritePropertyName("n_epochs"u8); + if (SerializedAdditionalRawData?.ContainsKey("n_epochs") != true) + { + writer.WritePropertyName("n_epochs"u8); #if NET6_0_OR_GREATER writer.WriteRawValue(NEpochs); #else - using (JsonDocument document = JsonDocument.Parse(NEpochs)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } + using (JsonDocument document = JsonDocument.Parse(NEpochs)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } #endif - if (true && _serializedAdditionalRawData != null) + } + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -78,8 +85,9 @@ internal static InternalFineTuningJobHyperparameters DeserializeInternalFineTuni nEpochs = BinaryData.FromString(property.Value.GetRawText()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalFineTuningJobHyperparameters.cs b/src/Generated/Models/InternalFineTuningJobHyperparameters.cs index f8303e9bb..c0855f274 100644 --- a/src/Generated/Models/InternalFineTuningJobHyperparameters.cs +++ b/src/Generated/Models/InternalFineTuningJobHyperparameters.cs @@ -9,8 +9,7 @@ namespace OpenAI.FineTuning { internal partial class InternalFineTuningJobHyperparameters { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalFineTuningJobHyperparameters(BinaryData nEpochs) { Argument.AssertNotNull(nEpochs, nameof(nEpochs)); @@ -21,7 +20,7 @@ internal InternalFineTuningJobHyperparameters(BinaryData nEpochs) internal InternalFineTuningJobHyperparameters(BinaryData nEpochs, IDictionary serializedAdditionalRawData) { NEpochs = nEpochs; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalFineTuningJobHyperparameters() diff --git a/src/Generated/Models/InternalFinetuneChatRequestInput.Serialization.cs b/src/Generated/Models/InternalFinetuneChatRequestInput.Serialization.cs index 8d0d2e2ec..29e279a5f 100644 --- a/src/Generated/Models/InternalFinetuneChatRequestInput.Serialization.cs +++ b/src/Generated/Models/InternalFinetuneChatRequestInput.Serialization.cs @@ -22,7 +22,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, M } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(Messages)) + if (SerializedAdditionalRawData?.ContainsKey("messages") != true && Optional.IsCollectionDefined(Messages)) { writer.WritePropertyName("messages"u8); writer.WriteStartArray(); @@ -44,7 +44,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, M } writer.WriteEndArray(); } - if (Optional.IsCollectionDefined(Tools)) + if (SerializedAdditionalRawData?.ContainsKey("tools") != true && Optional.IsCollectionDefined(Tools)) { writer.WritePropertyName("tools"u8); writer.WriteStartArray(); @@ -54,12 +54,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, M } writer.WriteEndArray(); } - if (Optional.IsDefined(ParallelToolCalls)) + if (SerializedAdditionalRawData?.ContainsKey("parallel_tool_calls") != true && Optional.IsDefined(ParallelToolCalls)) { writer.WritePropertyName("parallel_tool_calls"u8); writer.WriteBooleanValue(ParallelToolCalls.Value); } - if (Optional.IsCollectionDefined(Functions)) + if (SerializedAdditionalRawData?.ContainsKey("functions") != true && Optional.IsCollectionDefined(Functions)) { writer.WritePropertyName("functions"u8); writer.WriteStartArray(); @@ -69,10 +69,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, M } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -173,8 +177,9 @@ internal static InternalFinetuneChatRequestInput DeserializeInternalFinetuneChat functions = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalFinetuneChatRequestInput.cs b/src/Generated/Models/InternalFinetuneChatRequestInput.cs index 83bcf7f59..b325ed536 100644 --- a/src/Generated/Models/InternalFinetuneChatRequestInput.cs +++ b/src/Generated/Models/InternalFinetuneChatRequestInput.cs @@ -10,8 +10,7 @@ namespace OpenAI.FineTuning { internal partial class InternalFinetuneChatRequestInput { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalFinetuneChatRequestInput() { Messages = new ChangeTrackingList(); @@ -25,7 +24,7 @@ internal InternalFinetuneChatRequestInput(IList messages, IList Messages { get; } diff --git a/src/Generated/Models/InternalFinetuneCompletionRequestInput.Serialization.cs b/src/Generated/Models/InternalFinetuneCompletionRequestInput.Serialization.cs index 2de2bf106..a1b911649 100644 --- a/src/Generated/Models/InternalFinetuneCompletionRequestInput.Serialization.cs +++ b/src/Generated/Models/InternalFinetuneCompletionRequestInput.Serialization.cs @@ -21,20 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter wri } writer.WriteStartObject(); - if (Optional.IsDefined(Prompt)) + if (SerializedAdditionalRawData?.ContainsKey("prompt") != true && Optional.IsDefined(Prompt)) { writer.WritePropertyName("prompt"u8); writer.WriteStringValue(Prompt); } - if (Optional.IsDefined(Completion)) + if (SerializedAdditionalRawData?.ContainsKey("completion") != true && Optional.IsDefined(Completion)) { writer.WritePropertyName("completion"u8); writer.WriteStringValue(Completion); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -85,8 +89,9 @@ internal static InternalFinetuneCompletionRequestInput DeserializeInternalFinetu completion = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalFinetuneCompletionRequestInput.cs b/src/Generated/Models/InternalFinetuneCompletionRequestInput.cs index cd5ae8223..3e30640c6 100644 --- a/src/Generated/Models/InternalFinetuneCompletionRequestInput.cs +++ b/src/Generated/Models/InternalFinetuneCompletionRequestInput.cs @@ -9,8 +9,7 @@ namespace OpenAI.FineTuning { internal partial class InternalFinetuneCompletionRequestInput { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalFinetuneCompletionRequestInput() { } @@ -19,7 +18,7 @@ internal InternalFinetuneCompletionRequestInput(string prompt, string completion { Prompt = prompt; Completion = completion; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public string Prompt { get; set; } diff --git a/src/Generated/Models/InternalFunctionDefinition.Serialization.cs b/src/Generated/Models/InternalFunctionDefinition.Serialization.cs index e829d5a9d..4e3eecc09 100644 --- a/src/Generated/Models/InternalFunctionDefinition.Serialization.cs +++ b/src/Generated/Models/InternalFunctionDefinition.Serialization.cs @@ -21,14 +21,17 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } writer.WriteStartObject(); - if (Optional.IsDefined(Description)) + if (SerializedAdditionalRawData?.ContainsKey("description") != true && Optional.IsDefined(Description)) { writer.WritePropertyName("description"u8); writer.WriteStringValue(Description); } - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - if (Optional.IsDefined(Parameters)) + if (SerializedAdditionalRawData?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (SerializedAdditionalRawData?.ContainsKey("parameters") != true && Optional.IsDefined(Parameters)) { writer.WritePropertyName("parameters"u8); #if NET6_0_OR_GREATER @@ -40,10 +43,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } #endif } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -104,8 +111,9 @@ internal static InternalFunctionDefinition DeserializeInternalFunctionDefinition parameters = BinaryData.FromString(property.Value.GetRawText()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalFunctionDefinition.cs b/src/Generated/Models/InternalFunctionDefinition.cs index 5d04ee418..836a40e4b 100644 --- a/src/Generated/Models/InternalFunctionDefinition.cs +++ b/src/Generated/Models/InternalFunctionDefinition.cs @@ -9,8 +9,7 @@ namespace OpenAI { internal partial class InternalFunctionDefinition { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalFunctionDefinition(string name) { Argument.AssertNotNull(name, nameof(name)); @@ -23,7 +22,7 @@ internal InternalFunctionDefinition(string description, string name, BinaryData Description = description; Name = name; Parameters = parameters; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalFunctionDefinition() diff --git a/src/Generated/Models/InternalListAssistantsResponse.Serialization.cs b/src/Generated/Models/InternalListAssistantsResponse.Serialization.cs index 6c5c61b5e..985b078b3 100644 --- a/src/Generated/Models/InternalListAssistantsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListAssistantsResponse.Serialization.cs @@ -21,25 +21,44 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod } writer.WriteStartObject(); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("data"u8); - writer.WriteStartArray(); - foreach (var item in Data) + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - writer.WriteEndArray(); - writer.WritePropertyName("first_id"u8); - writer.WriteStringValue(FirstId); - writer.WritePropertyName("last_id"u8); - writer.WriteStringValue(LastId); - writer.WritePropertyName("has_more"u8); - writer.WriteBooleanValue(HasMore); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("data") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (var item in Data) { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (SerializedAdditionalRawData?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (SerializedAdditionalRawData?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -113,8 +132,9 @@ internal static InternalListAssistantsResponse DeserializeInternalListAssistants hasMore = property.Value.GetBoolean(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalListAssistantsResponse.cs b/src/Generated/Models/InternalListAssistantsResponse.cs index d00d08c17..6ee4c4ccd 100644 --- a/src/Generated/Models/InternalListAssistantsResponse.cs +++ b/src/Generated/Models/InternalListAssistantsResponse.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { internal partial class InternalListAssistantsResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalListAssistantsResponse(IEnumerable data, string firstId, string lastId, bool hasMore) { Argument.AssertNotNull(data, nameof(data)); @@ -31,7 +30,7 @@ internal InternalListAssistantsResponse(InternalListAssistantsResponseObject @ob FirstId = firstId; LastId = lastId; HasMore = hasMore; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalListAssistantsResponse() diff --git a/src/Generated/Models/InternalListBatchesResponse.Serialization.cs b/src/Generated/Models/InternalListBatchesResponse.Serialization.cs index d121466fe..a9ed8e1ca 100644 --- a/src/Generated/Models/InternalListBatchesResponse.Serialization.cs +++ b/src/Generated/Models/InternalListBatchesResponse.Serialization.cs @@ -21,31 +21,44 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR } writer.WriteStartObject(); - writer.WritePropertyName("data"u8); - writer.WriteStartArray(); - foreach (var item in Data) + if (SerializedAdditionalRawData?.ContainsKey("data") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (var item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); } - writer.WriteEndArray(); - if (Optional.IsDefined(FirstId)) + if (SerializedAdditionalRawData?.ContainsKey("first_id") != true && Optional.IsDefined(FirstId)) { writer.WritePropertyName("first_id"u8); writer.WriteStringValue(FirstId); } - if (Optional.IsDefined(LastId)) + if (SerializedAdditionalRawData?.ContainsKey("last_id") != true && Optional.IsDefined(LastId)) { writer.WritePropertyName("last_id"u8); writer.WriteStringValue(LastId); } - writer.WritePropertyName("has_more"u8); - writer.WriteBooleanValue(HasMore); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -119,8 +132,9 @@ internal static InternalListBatchesResponse DeserializeInternalListBatchesRespon @object = new InternalListBatchesResponseObject(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalListBatchesResponse.cs b/src/Generated/Models/InternalListBatchesResponse.cs index c7989e873..c81c672cc 100644 --- a/src/Generated/Models/InternalListBatchesResponse.cs +++ b/src/Generated/Models/InternalListBatchesResponse.cs @@ -10,8 +10,7 @@ namespace OpenAI.Batch { internal partial class InternalListBatchesResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalListBatchesResponse(IEnumerable data, bool hasMore) { Argument.AssertNotNull(data, nameof(data)); @@ -27,7 +26,7 @@ internal InternalListBatchesResponse(IReadOnlyList data, strin LastId = lastId; HasMore = hasMore; Object = @object; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalListBatchesResponse() diff --git a/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.Serialization.cs b/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.Serialization.cs index 6b97177d2..fe11464e0 100644 --- a/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.Serialization.cs @@ -21,16 +21,22 @@ void IJsonModel.Write(Utf8JsonWrit } writer.WriteStartObject(); - writer.WritePropertyName("data"u8); - writer.WriteStartArray(); - foreach (var item in Data) + if (SerializedAdditionalRawData?.ContainsKey("data") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (var item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); } - writer.WriteEndArray(); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (Optional.IsDefined(FirstId)) + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("first_id") != true && Optional.IsDefined(FirstId)) { if (FirstId != null) { @@ -42,7 +48,7 @@ void IJsonModel.Write(Utf8JsonWrit writer.WriteNull("first_id"); } } - if (Optional.IsDefined(LastId)) + if (SerializedAdditionalRawData?.ContainsKey("last_id") != true && Optional.IsDefined(LastId)) { if (LastId != null) { @@ -54,12 +60,19 @@ void IJsonModel.Write(Utf8JsonWrit writer.WriteNull("last_id"); } } - writer.WritePropertyName("has_more"u8); - writer.WriteBooleanValue(HasMore); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("has_more") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -143,8 +156,9 @@ internal static InternalListFineTuningJobCheckpointsResponse DeserializeInternal hasMore = property.Value.GetBoolean(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.cs b/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.cs index afdb42170..f96a3d96a 100644 --- a/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.cs +++ b/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.cs @@ -10,8 +10,7 @@ namespace OpenAI.FineTuning { internal partial class InternalListFineTuningJobCheckpointsResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalListFineTuningJobCheckpointsResponse(IEnumerable data, bool hasMore) { Argument.AssertNotNull(data, nameof(data)); @@ -27,7 +26,7 @@ internal InternalListFineTuningJobCheckpointsResponse(IReadOnlyList.Write(Utf8JsonWriter wr } writer.WriteStartObject(); - writer.WritePropertyName("data"u8); - writer.WriteStartArray(); - foreach (var item in Data) + if (SerializedAdditionalRawData?.ContainsKey("data") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (var item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - writer.WriteEndArray(); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -89,8 +99,9 @@ internal static InternalListFineTuningJobEventsResponse DeserializeInternalListF @object = new InternalListFineTuningJobEventsResponseObject(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalListFineTuningJobEventsResponse.cs b/src/Generated/Models/InternalListFineTuningJobEventsResponse.cs index 96e9935be..48fa4db44 100644 --- a/src/Generated/Models/InternalListFineTuningJobEventsResponse.cs +++ b/src/Generated/Models/InternalListFineTuningJobEventsResponse.cs @@ -10,8 +10,7 @@ namespace OpenAI.FineTuning { internal partial class InternalListFineTuningJobEventsResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalListFineTuningJobEventsResponse(IEnumerable data) { Argument.AssertNotNull(data, nameof(data)); @@ -23,7 +22,7 @@ internal InternalListFineTuningJobEventsResponse(IReadOnlyList.Write(Utf8JsonWriter writer, Model } writer.WriteStartObject(); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("data"u8); - writer.WriteStartArray(); - foreach (var item in Data) + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - writer.WriteEndArray(); - writer.WritePropertyName("first_id"u8); - writer.WriteStringValue(FirstId); - writer.WritePropertyName("last_id"u8); - writer.WriteStringValue(LastId); - writer.WritePropertyName("has_more"u8); - writer.WriteBooleanValue(HasMore); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("data") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (var item in Data) { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (SerializedAdditionalRawData?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (SerializedAdditionalRawData?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -113,8 +132,9 @@ internal static InternalListMessagesResponse DeserializeInternalListMessagesResp hasMore = property.Value.GetBoolean(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalListMessagesResponse.cs b/src/Generated/Models/InternalListMessagesResponse.cs index dd02bc2b6..8fd5be212 100644 --- a/src/Generated/Models/InternalListMessagesResponse.cs +++ b/src/Generated/Models/InternalListMessagesResponse.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { internal partial class InternalListMessagesResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalListMessagesResponse(IEnumerable data, string firstId, string lastId, bool hasMore) { Argument.AssertNotNull(data, nameof(data)); @@ -31,7 +30,7 @@ internal InternalListMessagesResponse(InternalListMessagesResponseObject @object FirstId = firstId; LastId = lastId; HasMore = hasMore; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalListMessagesResponse() diff --git a/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.Serialization.cs b/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.Serialization.cs index dcafd03c1..dd8bada4f 100644 --- a/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.Serialization.cs @@ -21,21 +21,34 @@ void IJsonModel.Write(Utf8JsonWrite } writer.WriteStartObject(); - writer.WritePropertyName("data"u8); - writer.WriteStartArray(); - foreach (var item in Data) + if (SerializedAdditionalRawData?.ContainsKey("data") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (var item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); } - writer.WriteEndArray(); - writer.WritePropertyName("has_more"u8); - writer.WriteBooleanValue(HasMore); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -97,8 +110,9 @@ internal static InternalListPaginatedFineTuningJobsResponse DeserializeInternalL @object = new InternalListPaginatedFineTuningJobsResponseObject(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.cs b/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.cs index cb54275ea..28ba3af0b 100644 --- a/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.cs +++ b/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.cs @@ -10,8 +10,7 @@ namespace OpenAI.FineTuning { internal partial class InternalListPaginatedFineTuningJobsResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalListPaginatedFineTuningJobsResponse(IEnumerable data, bool hasMore) { Argument.AssertNotNull(data, nameof(data)); @@ -25,7 +24,7 @@ internal InternalListPaginatedFineTuningJobsResponse(IReadOnlyList.Write(Utf8JsonWriter writer, Model } writer.WriteStartObject(); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("data"u8); - writer.WriteStartArray(); - foreach (var item in Data) + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - writer.WriteEndArray(); - writer.WritePropertyName("first_id"u8); - writer.WriteStringValue(FirstId); - writer.WritePropertyName("last_id"u8); - writer.WriteStringValue(LastId); - writer.WritePropertyName("has_more"u8); - writer.WriteBooleanValue(HasMore); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("data") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (var item in Data) { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (SerializedAdditionalRawData?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (SerializedAdditionalRawData?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -113,8 +132,9 @@ internal static InternalListRunStepsResponse DeserializeInternalListRunStepsResp hasMore = property.Value.GetBoolean(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalListRunStepsResponse.cs b/src/Generated/Models/InternalListRunStepsResponse.cs index adb139fda..4ef3eb223 100644 --- a/src/Generated/Models/InternalListRunStepsResponse.cs +++ b/src/Generated/Models/InternalListRunStepsResponse.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { internal partial class InternalListRunStepsResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalListRunStepsResponse(IEnumerable data, string firstId, string lastId, bool hasMore) { Argument.AssertNotNull(data, nameof(data)); @@ -31,7 +30,7 @@ internal InternalListRunStepsResponse(InternalListRunStepsResponseObject @object FirstId = firstId; LastId = lastId; HasMore = hasMore; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalListRunStepsResponse() diff --git a/src/Generated/Models/InternalListRunsResponse.Serialization.cs b/src/Generated/Models/InternalListRunsResponse.Serialization.cs index 2ea4ade5b..b0c7cfd7c 100644 --- a/src/Generated/Models/InternalListRunsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListRunsResponse.Serialization.cs @@ -21,25 +21,44 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead } writer.WriteStartObject(); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("data"u8); - writer.WriteStartArray(); - foreach (var item in Data) + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - writer.WriteEndArray(); - writer.WritePropertyName("first_id"u8); - writer.WriteStringValue(FirstId); - writer.WritePropertyName("last_id"u8); - writer.WriteStringValue(LastId); - writer.WritePropertyName("has_more"u8); - writer.WriteBooleanValue(HasMore); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("data") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (var item in Data) { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (SerializedAdditionalRawData?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (SerializedAdditionalRawData?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -113,8 +132,9 @@ internal static InternalListRunsResponse DeserializeInternalListRunsResponse(Jso hasMore = property.Value.GetBoolean(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalListRunsResponse.cs b/src/Generated/Models/InternalListRunsResponse.cs index b6488a487..4f10784e6 100644 --- a/src/Generated/Models/InternalListRunsResponse.cs +++ b/src/Generated/Models/InternalListRunsResponse.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { internal partial class InternalListRunsResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalListRunsResponse(IEnumerable data, string firstId, string lastId, bool hasMore) { Argument.AssertNotNull(data, nameof(data)); @@ -31,7 +30,7 @@ internal InternalListRunsResponse(InternalListRunsResponseObject @object, IReadO FirstId = firstId; LastId = lastId; HasMore = hasMore; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalListRunsResponse() diff --git a/src/Generated/Models/InternalListThreadsResponse.Serialization.cs b/src/Generated/Models/InternalListThreadsResponse.Serialization.cs index 324cddd77..e8960db37 100644 --- a/src/Generated/Models/InternalListThreadsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListThreadsResponse.Serialization.cs @@ -21,25 +21,44 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR } writer.WriteStartObject(); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("data"u8); - writer.WriteStartArray(); - foreach (var item in Data) + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - writer.WriteEndArray(); - writer.WritePropertyName("first_id"u8); - writer.WriteStringValue(FirstId); - writer.WritePropertyName("last_id"u8); - writer.WriteStringValue(LastId); - writer.WritePropertyName("has_more"u8); - writer.WriteBooleanValue(HasMore); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("data") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (var item in Data) { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (SerializedAdditionalRawData?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (SerializedAdditionalRawData?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -113,8 +132,9 @@ internal static InternalListThreadsResponse DeserializeInternalListThreadsRespon hasMore = property.Value.GetBoolean(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalListThreadsResponse.cs b/src/Generated/Models/InternalListThreadsResponse.cs index 8714a1c72..0424339fa 100644 --- a/src/Generated/Models/InternalListThreadsResponse.cs +++ b/src/Generated/Models/InternalListThreadsResponse.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { internal partial class InternalListThreadsResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalListThreadsResponse(IEnumerable data, string firstId, string lastId, bool hasMore) { Argument.AssertNotNull(data, nameof(data)); @@ -31,7 +30,7 @@ internal InternalListThreadsResponse(InternalListThreadsResponseObject @object, FirstId = firstId; LastId = lastId; HasMore = hasMore; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalListThreadsResponse() diff --git a/src/Generated/Models/InternalListVectorStoreFilesResponse.Serialization.cs b/src/Generated/Models/InternalListVectorStoreFilesResponse.Serialization.cs index 09005515a..722e441c6 100644 --- a/src/Generated/Models/InternalListVectorStoreFilesResponse.Serialization.cs +++ b/src/Generated/Models/InternalListVectorStoreFilesResponse.Serialization.cs @@ -21,25 +21,44 @@ void IJsonModel.Write(Utf8JsonWriter write } writer.WriteStartObject(); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("data"u8); - writer.WriteStartArray(); - foreach (var item in Data) + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - writer.WriteEndArray(); - writer.WritePropertyName("first_id"u8); - writer.WriteStringValue(FirstId); - writer.WritePropertyName("last_id"u8); - writer.WriteStringValue(LastId); - writer.WritePropertyName("has_more"u8); - writer.WriteBooleanValue(HasMore); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("data") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (var item in Data) { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (SerializedAdditionalRawData?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (SerializedAdditionalRawData?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -113,8 +132,9 @@ internal static InternalListVectorStoreFilesResponse DeserializeInternalListVect hasMore = property.Value.GetBoolean(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalListVectorStoreFilesResponse.cs b/src/Generated/Models/InternalListVectorStoreFilesResponse.cs index fd06685fb..cef502099 100644 --- a/src/Generated/Models/InternalListVectorStoreFilesResponse.cs +++ b/src/Generated/Models/InternalListVectorStoreFilesResponse.cs @@ -10,8 +10,7 @@ namespace OpenAI.VectorStores { internal partial class InternalListVectorStoreFilesResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalListVectorStoreFilesResponse(IEnumerable data, string firstId, string lastId, bool hasMore) { Argument.AssertNotNull(data, nameof(data)); @@ -31,7 +30,7 @@ internal InternalListVectorStoreFilesResponse(InternalListVectorStoreFilesRespon FirstId = firstId; LastId = lastId; HasMore = hasMore; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalListVectorStoreFilesResponse() diff --git a/src/Generated/Models/InternalListVectorStoresResponse.Serialization.cs b/src/Generated/Models/InternalListVectorStoresResponse.Serialization.cs index 0e93ab30f..b65f1e2e6 100644 --- a/src/Generated/Models/InternalListVectorStoresResponse.Serialization.cs +++ b/src/Generated/Models/InternalListVectorStoresResponse.Serialization.cs @@ -21,25 +21,44 @@ void IJsonModel.Write(Utf8JsonWriter writer, M } writer.WriteStartObject(); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("data"u8); - writer.WriteStartArray(); - foreach (var item in Data) + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - writer.WriteEndArray(); - writer.WritePropertyName("first_id"u8); - writer.WriteStringValue(FirstId); - writer.WritePropertyName("last_id"u8); - writer.WriteStringValue(LastId); - writer.WritePropertyName("has_more"u8); - writer.WriteBooleanValue(HasMore); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("data") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (var item in Data) { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (SerializedAdditionalRawData?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (SerializedAdditionalRawData?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -113,8 +132,9 @@ internal static InternalListVectorStoresResponse DeserializeInternalListVectorSt hasMore = property.Value.GetBoolean(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalListVectorStoresResponse.cs b/src/Generated/Models/InternalListVectorStoresResponse.cs index c4fd91f58..98135e24b 100644 --- a/src/Generated/Models/InternalListVectorStoresResponse.cs +++ b/src/Generated/Models/InternalListVectorStoresResponse.cs @@ -10,8 +10,7 @@ namespace OpenAI.VectorStores { internal partial class InternalListVectorStoresResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalListVectorStoresResponse(IEnumerable data, string firstId, string lastId, bool hasMore) { Argument.AssertNotNull(data, nameof(data)); @@ -31,7 +30,7 @@ internal InternalListVectorStoresResponse(InternalListVectorStoresResponseObject FirstId = firstId; LastId = lastId; HasMore = hasMore; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalListVectorStoresResponse() diff --git a/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.Serialization.cs b/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.Serialization.cs index 79a2f0233..f23daaf9c 100644 --- a/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.Serialization.cs @@ -21,17 +21,24 @@ void IJsonModel.Write(Utf8JsonWrit } writer.WriteStartObject(); - writer.WritePropertyName("url"u8); - writer.WriteStringValue(Url.AbsoluteUri); - if (Optional.IsDefined(Detail)) + if (SerializedAdditionalRawData?.ContainsKey("url") != true) + { + writer.WritePropertyName("url"u8); + writer.WriteStringValue(Url.AbsoluteUri); + } + if (SerializedAdditionalRawData?.ContainsKey("detail") != true && Optional.IsDefined(Detail)) { writer.WritePropertyName("detail"u8); writer.WriteStringValue(Detail); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -82,8 +89,9 @@ internal static InternalMessageContentImageUrlObjectImageUrl DeserializeInternal detail = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.cs b/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.cs index addb510fa..ec3f49b7f 100644 --- a/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.cs +++ b/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageContentImageUrlObjectImageUrl { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalMessageContentImageUrlObjectImageUrl(Uri url) { Argument.AssertNotNull(url, nameof(url)); @@ -22,7 +21,7 @@ internal InternalMessageContentImageUrlObjectImageUrl(Uri url, string detail, ID { Url = url; Detail = detail; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalMessageContentImageUrlObjectImageUrl() diff --git a/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.Serialization.cs b/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.Serialization.cs index 194dacbc7..98f67e77b 100644 --- a/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.Serialization.cs @@ -21,17 +21,24 @@ void IJsonModel.Write(Utf8JsonWri } writer.WriteStartObject(); - writer.WritePropertyName("file_id"u8); - writer.WriteStringValue(FileId); - if (Optional.IsDefined(Detail)) + if (SerializedAdditionalRawData?.ContainsKey("file_id") != true) + { + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + if (SerializedAdditionalRawData?.ContainsKey("detail") != true && Optional.IsDefined(Detail)) { writer.WritePropertyName("detail"u8); writer.WriteStringValue(Detail); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -82,8 +89,9 @@ internal static InternalMessageContentItemFileObjectImageFile DeserializeInterna detail = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.cs b/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.cs index c4f9f3afe..b002cac9f 100644 --- a/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.cs +++ b/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageContentItemFileObjectImageFile { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalMessageContentItemFileObjectImageFile(string fileId) { Argument.AssertNotNull(fileId, nameof(fileId)); @@ -22,7 +21,7 @@ internal InternalMessageContentItemFileObjectImageFile(string fileId, string det { FileId = fileId; Detail = detail; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalMessageContentItemFileObjectImageFile() diff --git a/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs b/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs index 9fc3672fc..370380b90 100644 --- a/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.cs b/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.cs index 857b89071..1c255cb2c 100644 --- a/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.cs +++ b/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageContentTextAnnotationsFileCitationObjectFileCitation { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalMessageContentTextAnnotationsFileCitationObjectFileCitation(string fileId) { Argument.AssertNotNull(fileId, nameof(fileId)); @@ -21,7 +20,7 @@ public InternalMessageContentTextAnnotationsFileCitationObjectFileCitation(strin internal InternalMessageContentTextAnnotationsFileCitationObjectFileCitation(string fileId, IDictionary serializedAdditionalRawData) { FileId = fileId; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalMessageContentTextAnnotationsFileCitationObjectFileCitation() diff --git a/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.Serialization.cs b/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.Serialization.cs index f741cd13a..9f03121a2 100644 --- a/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Wri } writer.WriteStartObject(); - writer.WritePropertyName("file_id"u8); - writer.WriteStringValue(FileId); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("file_id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static InternalMessageContentTextAnnotationsFilePathObjectFilePath Dese fileId = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.cs b/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.cs index bb9ca8006..de47c05b1 100644 --- a/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.cs +++ b/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageContentTextAnnotationsFilePathObjectFilePath { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalMessageContentTextAnnotationsFilePathObjectFilePath(string fileId) { Argument.AssertNotNull(fileId, nameof(fileId)); @@ -21,7 +20,7 @@ public InternalMessageContentTextAnnotationsFilePathObjectFilePath(string fileId internal InternalMessageContentTextAnnotationsFilePathObjectFilePath(string fileId, IDictionary serializedAdditionalRawData) { FileId = fileId; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalMessageContentTextAnnotationsFilePathObjectFilePath() diff --git a/src/Generated/Models/InternalMessageDeltaObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaObject.Serialization.cs index 315470eb3..2ea5e979d 100644 --- a/src/Generated/Models/InternalMessageDeltaObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaObject.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("delta"u8); - writer.WriteObjectValue(Delta, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("delta") != true) + { + writer.WritePropertyName("delta"u8); + writer.WriteObjectValue(Delta, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalMessageDeltaObject DeserializeInternalMessageDeltaObject delta = MessageDeltaObjectDelta.DeserializeMessageDeltaObjectDelta(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalMessageDeltaObject.cs b/src/Generated/Models/InternalMessageDeltaObject.cs index e821e829f..1f677c64a 100644 --- a/src/Generated/Models/InternalMessageDeltaObject.cs +++ b/src/Generated/Models/InternalMessageDeltaObject.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageDeltaObject { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalMessageDeltaObject(string id, MessageDeltaObjectDelta delta) { Argument.AssertNotNull(id, nameof(id)); @@ -25,7 +24,7 @@ internal InternalMessageDeltaObject(string id, InternalMessageDeltaObjectObject Id = id; Object = @object; Delta = delta; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalMessageDeltaObject() diff --git a/src/Generated/Models/InternalMessageImageFileContent.Serialization.cs b/src/Generated/Models/InternalMessageImageFileContent.Serialization.cs index e71efedc9..874fbdd71 100644 --- a/src/Generated/Models/InternalMessageImageFileContent.Serialization.cs +++ b/src/Generated/Models/InternalMessageImageFileContent.Serialization.cs @@ -48,8 +48,9 @@ internal static InternalMessageImageFileContent DeserializeInternalMessageImageF imageFile = InternalMessageContentItemFileObjectImageFile.DeserializeInternalMessageContentItemFileObjectImageFile(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalMessageImageUrlContent.Serialization.cs b/src/Generated/Models/InternalMessageImageUrlContent.Serialization.cs index 9c0dfe325..f1a170c22 100644 --- a/src/Generated/Models/InternalMessageImageUrlContent.Serialization.cs +++ b/src/Generated/Models/InternalMessageImageUrlContent.Serialization.cs @@ -48,8 +48,9 @@ internal static InternalMessageImageUrlContent DeserializeInternalMessageImageUr imageUrl = InternalMessageContentImageUrlObjectImageUrl.DeserializeInternalMessageContentImageUrlObjectImageUrl(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalMessageObjectAttachment.Serialization.cs b/src/Generated/Models/InternalMessageObjectAttachment.Serialization.cs index 6eb58fe78..8cf67e55a 100644 --- a/src/Generated/Models/InternalMessageObjectAttachment.Serialization.cs +++ b/src/Generated/Models/InternalMessageObjectAttachment.Serialization.cs @@ -21,12 +21,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo } writer.WriteStartObject(); - if (Optional.IsDefined(FileId)) + if (SerializedAdditionalRawData?.ContainsKey("file_id") != true && Optional.IsDefined(FileId)) { writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } - if (Optional.IsCollectionDefined(Tools)) + if (SerializedAdditionalRawData?.ContainsKey("tools") != true && Optional.IsCollectionDefined(Tools)) { writer.WritePropertyName("tools"u8); writer.WriteStartArray(); @@ -48,10 +48,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -118,8 +122,9 @@ internal static InternalMessageObjectAttachment DeserializeInternalMessageObject tools = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalMessageObjectAttachment.cs b/src/Generated/Models/InternalMessageObjectAttachment.cs index 621bdd7bc..1e92848e3 100644 --- a/src/Generated/Models/InternalMessageObjectAttachment.cs +++ b/src/Generated/Models/InternalMessageObjectAttachment.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageObjectAttachment { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalMessageObjectAttachment() { Tools = new ChangeTrackingList(); @@ -20,7 +19,7 @@ internal InternalMessageObjectAttachment(string fileId, IReadOnlyList.Write(Utf8JsonWrite } writer.WriteStartObject(); - if (Optional.IsDefined(CodeInterpreter)) + if (SerializedAdditionalRawData?.ContainsKey("code_interpreter") != true && Optional.IsDefined(CodeInterpreter)) { writer.WritePropertyName("code_interpreter"u8); writer.WriteObjectValue(CodeInterpreter, options); } - if (Optional.IsDefined(FileSearch)) + if (SerializedAdditionalRawData?.ContainsKey("file_search") != true && Optional.IsDefined(FileSearch)) { writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -93,8 +97,9 @@ internal static InternalModifyAssistantRequestToolResources DeserializeInternalM fileSearch = InternalModifyAssistantRequestToolResourcesFileSearch.DeserializeInternalModifyAssistantRequestToolResourcesFileSearch(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalModifyAssistantRequestToolResources.cs b/src/Generated/Models/InternalModifyAssistantRequestToolResources.cs index 65383db0b..5aa4a77d8 100644 --- a/src/Generated/Models/InternalModifyAssistantRequestToolResources.cs +++ b/src/Generated/Models/InternalModifyAssistantRequestToolResources.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalModifyAssistantRequestToolResources { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalModifyAssistantRequestToolResources() { } @@ -19,7 +18,7 @@ internal InternalModifyAssistantRequestToolResources(InternalModifyAssistantRequ { CodeInterpreter = codeInterpreter; FileSearch = fileSearch; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public InternalModifyAssistantRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } diff --git a/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.Serialization.cs index 87d0b050f..c479b1a2f 100644 --- a/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Writ } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(FileIds)) + if (SerializedAdditionalRawData?.ContainsKey("file_ids") != true && Optional.IsCollectionDefined(FileIds)) { writer.WritePropertyName("file_ids"u8); writer.WriteStartArray(); @@ -31,10 +31,14 @@ void IJsonModel.Writ } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -88,8 +92,9 @@ internal static InternalModifyAssistantRequestToolResourcesCodeInterpreter Deser fileIds = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.cs b/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.cs index 0dcf41e62..1b2538796 100644 --- a/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.cs +++ b/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalModifyAssistantRequestToolResourcesCodeInterpreter { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalModifyAssistantRequestToolResourcesCodeInterpreter() { FileIds = new ChangeTrackingList(); @@ -19,7 +18,7 @@ public InternalModifyAssistantRequestToolResourcesCodeInterpreter() internal InternalModifyAssistantRequestToolResourcesCodeInterpreter(IList fileIds, IDictionary serializedAdditionalRawData) { FileIds = fileIds; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IList FileIds { get; } diff --git a/src/Generated/Models/InternalModifyAssistantRequestToolResourcesFileSearch.Serialization.cs b/src/Generated/Models/InternalModifyAssistantRequestToolResourcesFileSearch.Serialization.cs index a8884b903..44392baf4 100644 --- a/src/Generated/Models/InternalModifyAssistantRequestToolResourcesFileSearch.Serialization.cs +++ b/src/Generated/Models/InternalModifyAssistantRequestToolResourcesFileSearch.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(VectorStoreIds)) + if (SerializedAdditionalRawData?.ContainsKey("vector_store_ids") != true && Optional.IsCollectionDefined(VectorStoreIds)) { writer.WritePropertyName("vector_store_ids"u8); writer.WriteStartArray(); @@ -31,10 +31,14 @@ void IJsonModel.Write(Utf } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -88,8 +92,9 @@ internal static InternalModifyAssistantRequestToolResourcesFileSearch Deserializ vectorStoreIds = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalModifyAssistantRequestToolResourcesFileSearch.cs b/src/Generated/Models/InternalModifyAssistantRequestToolResourcesFileSearch.cs index 8633f16ba..e9b82d57a 100644 --- a/src/Generated/Models/InternalModifyAssistantRequestToolResourcesFileSearch.cs +++ b/src/Generated/Models/InternalModifyAssistantRequestToolResourcesFileSearch.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalModifyAssistantRequestToolResourcesFileSearch { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalModifyAssistantRequestToolResourcesFileSearch() { VectorStoreIds = new ChangeTrackingList(); @@ -19,7 +18,7 @@ public InternalModifyAssistantRequestToolResourcesFileSearch() internal InternalModifyAssistantRequestToolResourcesFileSearch(IList vectorStoreIds, IDictionary serializedAdditionalRawData) { VectorStoreIds = vectorStoreIds; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IList VectorStoreIds { get; } diff --git a/src/Generated/Models/InternalModifyThreadRequestToolResources.Serialization.cs b/src/Generated/Models/InternalModifyThreadRequestToolResources.Serialization.cs index 93e19b426..361e88afa 100644 --- a/src/Generated/Models/InternalModifyThreadRequestToolResources.Serialization.cs +++ b/src/Generated/Models/InternalModifyThreadRequestToolResources.Serialization.cs @@ -21,20 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter w } writer.WriteStartObject(); - if (Optional.IsDefined(CodeInterpreter)) + if (SerializedAdditionalRawData?.ContainsKey("code_interpreter") != true && Optional.IsDefined(CodeInterpreter)) { writer.WritePropertyName("code_interpreter"u8); writer.WriteObjectValue(CodeInterpreter, options); } - if (Optional.IsDefined(FileSearch)) + if (SerializedAdditionalRawData?.ContainsKey("file_search") != true && Optional.IsDefined(FileSearch)) { writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -93,8 +97,9 @@ internal static InternalModifyThreadRequestToolResources DeserializeInternalModi fileSearch = InternalModifyThreadRequestToolResourcesFileSearch.DeserializeInternalModifyThreadRequestToolResourcesFileSearch(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalModifyThreadRequestToolResources.cs b/src/Generated/Models/InternalModifyThreadRequestToolResources.cs index b3747496b..0d8078ba4 100644 --- a/src/Generated/Models/InternalModifyThreadRequestToolResources.cs +++ b/src/Generated/Models/InternalModifyThreadRequestToolResources.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalModifyThreadRequestToolResources { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalModifyThreadRequestToolResources() { } @@ -19,7 +18,7 @@ internal InternalModifyThreadRequestToolResources(InternalModifyThreadRequestToo { CodeInterpreter = codeInterpreter; FileSearch = fileSearch; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public InternalModifyThreadRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } diff --git a/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.Serialization.cs index 2390d6adb..72455c6a4 100644 --- a/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(U } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(FileIds)) + if (SerializedAdditionalRawData?.ContainsKey("file_ids") != true && Optional.IsCollectionDefined(FileIds)) { writer.WritePropertyName("file_ids"u8); writer.WriteStartArray(); @@ -31,10 +31,14 @@ void IJsonModel.Write(U } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -88,8 +92,9 @@ internal static InternalModifyThreadRequestToolResourcesCodeInterpreter Deserial fileIds = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.cs b/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.cs index d861cec30..df0ce6bf8 100644 --- a/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.cs +++ b/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalModifyThreadRequestToolResourcesCodeInterpreter { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalModifyThreadRequestToolResourcesCodeInterpreter() { FileIds = new ChangeTrackingList(); @@ -19,7 +18,7 @@ public InternalModifyThreadRequestToolResourcesCodeInterpreter() internal InternalModifyThreadRequestToolResourcesCodeInterpreter(IList fileIds, IDictionary serializedAdditionalRawData) { FileIds = fileIds; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IList FileIds { get; } diff --git a/src/Generated/Models/InternalModifyThreadRequestToolResourcesFileSearch.Serialization.cs b/src/Generated/Models/InternalModifyThreadRequestToolResourcesFileSearch.Serialization.cs index a66c5049e..d535a557a 100644 --- a/src/Generated/Models/InternalModifyThreadRequestToolResourcesFileSearch.Serialization.cs +++ b/src/Generated/Models/InternalModifyThreadRequestToolResourcesFileSearch.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8Js } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(VectorStoreIds)) + if (SerializedAdditionalRawData?.ContainsKey("vector_store_ids") != true && Optional.IsCollectionDefined(VectorStoreIds)) { writer.WritePropertyName("vector_store_ids"u8); writer.WriteStartArray(); @@ -31,10 +31,14 @@ void IJsonModel.Write(Utf8Js } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -88,8 +92,9 @@ internal static InternalModifyThreadRequestToolResourcesFileSearch DeserializeIn vectorStoreIds = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalModifyThreadRequestToolResourcesFileSearch.cs b/src/Generated/Models/InternalModifyThreadRequestToolResourcesFileSearch.cs index cec40e69d..f87c6ace1 100644 --- a/src/Generated/Models/InternalModifyThreadRequestToolResourcesFileSearch.cs +++ b/src/Generated/Models/InternalModifyThreadRequestToolResourcesFileSearch.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalModifyThreadRequestToolResourcesFileSearch { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalModifyThreadRequestToolResourcesFileSearch() { VectorStoreIds = new ChangeTrackingList(); @@ -19,7 +18,7 @@ public InternalModifyThreadRequestToolResourcesFileSearch() internal InternalModifyThreadRequestToolResourcesFileSearch(IList vectorStoreIds, IDictionary serializedAdditionalRawData) { VectorStoreIds = vectorStoreIds; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IList VectorStoreIds { get; } diff --git a/src/Generated/Models/InternalRequestMessageTextContent.Serialization.cs b/src/Generated/Models/InternalRequestMessageTextContent.Serialization.cs index 21809e845..7ee3c6e25 100644 --- a/src/Generated/Models/InternalRequestMessageTextContent.Serialization.cs +++ b/src/Generated/Models/InternalRequestMessageTextContent.Serialization.cs @@ -48,8 +48,9 @@ internal static InternalRequestMessageTextContent DeserializeInternalRequestMess text = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRequiredFunctionToolCall.Serialization.cs b/src/Generated/Models/InternalRequiredFunctionToolCall.Serialization.cs index c550c4ff0..a1f6474d3 100644 --- a/src/Generated/Models/InternalRequiredFunctionToolCall.Serialization.cs +++ b/src/Generated/Models/InternalRequiredFunctionToolCall.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, M } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("type"u8); - writer.WriteObjectValue(_type, options); - writer.WritePropertyName("function"u8); - writer.WriteObjectValue(_internalFunction, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteObjectValue(_type, options); + } + if (SerializedAdditionalRawData?.ContainsKey("function") != true) + { + writer.WritePropertyName("function"u8); + writer.WriteObjectValue(_internalFunction, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalRequiredFunctionToolCall DeserializeInternalRequiredFunc function = InternalRunToolCallObjectFunction.DeserializeInternalRunToolCallObjectFunction(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRequiredFunctionToolCall.cs b/src/Generated/Models/InternalRequiredFunctionToolCall.cs index 4c3672a27..3d44b809d 100644 --- a/src/Generated/Models/InternalRequiredFunctionToolCall.cs +++ b/src/Generated/Models/InternalRequiredFunctionToolCall.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalRequiredFunctionToolCall { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalRequiredFunctionToolCall(string id, InternalRunToolCallObjectFunction internalFunction) { Argument.AssertNotNull(id, nameof(id)); @@ -25,7 +24,7 @@ internal InternalRequiredFunctionToolCall(string id, object type, InternalRunToo Id = id; _type = type; _internalFunction = internalFunction; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalRequiredFunctionToolCall() diff --git a/src/Generated/Models/InternalResponseMessageTextContent.Serialization.cs b/src/Generated/Models/InternalResponseMessageTextContent.Serialization.cs index 14afc8525..3996ddd9e 100644 --- a/src/Generated/Models/InternalResponseMessageTextContent.Serialization.cs +++ b/src/Generated/Models/InternalResponseMessageTextContent.Serialization.cs @@ -48,8 +48,9 @@ internal static InternalResponseMessageTextContent DeserializeInternalResponseMe text = MessageContentTextObjectText.DeserializeMessageContentTextObjectText(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.Serialization.cs b/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.Serialization.cs index db2e87b6c..be434a596 100644 --- a/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.Serialization.cs +++ b/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.Serialization.cs @@ -21,17 +21,24 @@ void IJsonModel.Write(Utf8Json } writer.WriteStartObject(); - writer.WritePropertyName("tool_calls"u8); - writer.WriteStartArray(); - foreach (var item in ToolCalls) + if (SerializedAdditionalRawData?.ContainsKey("tool_calls") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("tool_calls"u8); + writer.WriteStartArray(); + foreach (var item in ToolCalls) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); } - writer.WriteEndArray(); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -81,8 +88,9 @@ internal static InternalRunObjectRequiredActionSubmitToolOutputs DeserializeInte toolCalls = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.cs b/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.cs index 51b94f72d..323fc341c 100644 --- a/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.cs +++ b/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunObjectRequiredActionSubmitToolOutputs { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalRunObjectRequiredActionSubmitToolOutputs(IEnumerable toolCalls) { Argument.AssertNotNull(toolCalls, nameof(toolCalls)); @@ -22,7 +21,7 @@ internal InternalRunObjectRequiredActionSubmitToolOutputs(IEnumerable toolCalls, IDictionary serializedAdditionalRawData) { ToolCalls = toolCalls; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalRunObjectRequiredActionSubmitToolOutputs() diff --git a/src/Generated/Models/InternalRunRequiredAction.Serialization.cs b/src/Generated/Models/InternalRunRequiredAction.Serialization.cs index e2607100d..7cd1bed9f 100644 --- a/src/Generated/Models/InternalRunRequiredAction.Serialization.cs +++ b/src/Generated/Models/InternalRunRequiredAction.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteObjectValue(Type, options); - writer.WritePropertyName("submit_tool_outputs"u8); - writer.WriteObjectValue(SubmitToolOutputs, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteObjectValue(Type, options); + } + if (SerializedAdditionalRawData?.ContainsKey("submit_tool_outputs") != true) + { + writer.WritePropertyName("submit_tool_outputs"u8); + writer.WriteObjectValue(SubmitToolOutputs, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static InternalRunRequiredAction DeserializeInternalRunRequiredAction(J submitToolOutputs = InternalRunObjectRequiredActionSubmitToolOutputs.DeserializeInternalRunObjectRequiredActionSubmitToolOutputs(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunRequiredAction.cs b/src/Generated/Models/InternalRunRequiredAction.cs index b284b7e11..627dd8b84 100644 --- a/src/Generated/Models/InternalRunRequiredAction.cs +++ b/src/Generated/Models/InternalRunRequiredAction.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunRequiredAction { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalRunRequiredAction(InternalRunObjectRequiredActionSubmitToolOutputs submitToolOutputs) { Argument.AssertNotNull(submitToolOutputs, nameof(submitToolOutputs)); @@ -22,7 +21,7 @@ internal InternalRunRequiredAction(object type, InternalRunObjectRequiredActionS { Type = type; SubmitToolOutputs = submitToolOutputs; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalRunRequiredAction() diff --git a/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.Serialization.cs b/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.Serialization.cs index eced3a380..3517b3b82 100644 --- a/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.Serialization.cs +++ b/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter wr } writer.WriteStartObject(); - writer.WritePropertyName("logs"u8); - writer.WriteStringValue(InternalLogs); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("logs") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("logs"u8); + writer.WriteStringValue(InternalLogs); + } + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static InternalRunStepCodeInterpreterLogOutput DeserializeInternalRunSt type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepCodeInterpreterToolCallDetails.Serialization.cs b/src/Generated/Models/InternalRunStepCodeInterpreterToolCallDetails.Serialization.cs index 68f8c7477..432f26036 100644 --- a/src/Generated/Models/InternalRunStepCodeInterpreterToolCallDetails.Serialization.cs +++ b/src/Generated/Models/InternalRunStepCodeInterpreterToolCallDetails.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWri } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("code_interpreter"u8); - writer.WriteObjectValue(_codeInterpreter, options); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("code_interpreter") != true) + { + writer.WritePropertyName("code_interpreter"u8); + writer.WriteObjectValue(_codeInterpreter, options); + } + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalRunStepCodeInterpreterToolCallDetails DeserializeInterna type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDelta.Serialization.cs b/src/Generated/Models/InternalRunStepDelta.Serialization.cs index 85f18f9e0..d485c4fb7 100644 --- a/src/Generated/Models/InternalRunStepDelta.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDelta.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWr } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("object"u8); - writer.WriteObjectValue(Object, options); - writer.WritePropertyName("delta"u8); - writer.WriteObjectValue(Delta, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteObjectValue(Object, options); + } + if (SerializedAdditionalRawData?.ContainsKey("delta") != true) + { + writer.WritePropertyName("delta"u8); + writer.WriteObjectValue(Delta, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalRunStepDelta DeserializeInternalRunStepDelta(JsonElement delta = InternalRunStepDeltaObjectDelta.DeserializeInternalRunStepDeltaObjectDelta(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDelta.cs b/src/Generated/Models/InternalRunStepDelta.cs index 5923e5705..55d73464a 100644 --- a/src/Generated/Models/InternalRunStepDelta.cs +++ b/src/Generated/Models/InternalRunStepDelta.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDelta { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalRunStepDelta(string id, InternalRunStepDeltaObjectDelta delta) { Argument.AssertNotNull(id, nameof(id)); @@ -25,7 +24,7 @@ internal InternalRunStepDelta(string id, object @object, InternalRunStepDeltaObj Id = id; Object = @object; Delta = delta; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalRunStepDelta() diff --git a/src/Generated/Models/InternalRunStepDeltaObjectDelta.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaObjectDelta.Serialization.cs index a14b0cf94..5c5404753 100644 --- a/src/Generated/Models/InternalRunStepDeltaObjectDelta.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaObjectDelta.Serialization.cs @@ -21,15 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo } writer.WriteStartObject(); - if (Optional.IsDefined(StepDetails)) + if (SerializedAdditionalRawData?.ContainsKey("step_details") != true && Optional.IsDefined(StepDetails)) { writer.WritePropertyName("step_details"u8); writer.WriteObjectValue(StepDetails, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -78,8 +82,9 @@ internal static InternalRunStepDeltaObjectDelta DeserializeInternalRunStepDeltaO stepDetails = InternalRunStepDeltaStepDetails.DeserializeInternalRunStepDeltaStepDetails(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDeltaObjectDelta.cs b/src/Generated/Models/InternalRunStepDeltaObjectDelta.cs index 97b20ca55..1faf845db 100644 --- a/src/Generated/Models/InternalRunStepDeltaObjectDelta.cs +++ b/src/Generated/Models/InternalRunStepDeltaObjectDelta.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaObjectDelta { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalRunStepDeltaObjectDelta() { } @@ -18,7 +17,7 @@ internal InternalRunStepDeltaObjectDelta() internal InternalRunStepDeltaObjectDelta(InternalRunStepDeltaStepDetails stepDetails, IDictionary serializedAdditionalRawData) { StepDetails = stepDetails; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public InternalRunStepDeltaStepDetails StepDetails { get; } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetails.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetails.Serialization.cs index ab142e262..6ba369d00 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetails.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetails.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetails.cs b/src/Generated/Models/InternalRunStepDeltaStepDetails.cs index d929ace6b..987886798 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetails.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetails.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal abstract partial class InternalRunStepDeltaStepDetails { - private protected IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } protected InternalRunStepDeltaStepDetails() { } @@ -18,7 +17,7 @@ protected InternalRunStepDeltaStepDetails() internal InternalRunStepDeltaStepDetails(string type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal string Type { get; set; } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.Serialization.cs index 58ab09576..6b1cd7fb1 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.Serialization.cs @@ -21,17 +21,24 @@ void IJsonModel.Write(Utf8 } writer.WriteStartObject(); - if (Optional.IsDefined(MessageCreation)) + if (SerializedAdditionalRawData?.ContainsKey("message_creation") != true && Optional.IsDefined(MessageCreation)) { writer.WritePropertyName("message_creation"u8); writer.WriteObjectValue(MessageCreation, options); } - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -86,8 +93,9 @@ internal static InternalRunStepDeltaStepDetailsMessageCreationObject Deserialize type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.Serialization.cs index cb9f753f6..9b61f2d96 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.Serialization.cs @@ -21,15 +21,19 @@ void IJsonModel(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.cs index 360465097..812f249c3 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation() { } @@ -18,7 +17,7 @@ internal InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation() internal InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation(string messageId, IDictionary serializedAdditionalRawData) { MessageId = messageId; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public string MessageId { get; } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.Serialization.cs index 213213609..7c76a0307 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.Serialization.cs @@ -21,24 +21,34 @@ void IJsonModel.Write(Utf8Js } writer.WriteStartObject(); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - if (Optional.IsDefined(Id)) + if (SerializedAdditionalRawData?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + if (SerializedAdditionalRawData?.ContainsKey("id") != true && Optional.IsDefined(Id)) { writer.WritePropertyName("id"u8); writer.WriteStringValue(Id); } - if (Optional.IsDefined(CodeInterpreter)) + if (SerializedAdditionalRawData?.ContainsKey("code_interpreter") != true && Optional.IsDefined(CodeInterpreter)) { writer.WritePropertyName("code_interpreter"u8); writer.WriteObjectValue(CodeInterpreter, options); } - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -105,8 +115,9 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeObject DeserializeIn type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs index aaca2b893..4b159c20a 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs @@ -21,12 +21,12 @@ void IJsonModel(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.cs index 765fe60e6..2330d340a 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter() { Outputs = new ChangeTrackingList(); @@ -20,7 +19,7 @@ internal InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter(strin { Input = input; Outputs = outputs; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public string Input { get; } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.Serialization.cs index f516b6843..04c7653cd 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.Serialization.cs @@ -21,19 +21,29 @@ void IJsonModel.W } writer.WriteStartObject(); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - if (Optional.IsDefined(Image)) + if (SerializedAdditionalRawData?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + if (SerializedAdditionalRawData?.ContainsKey("image") != true && Optional.IsDefined(Image)) { writer.WritePropertyName("image"u8); writer.WriteObjectValue(Image, options); } - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -94,8 +104,9 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject De type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs index a91e923f3..edb0a3f42 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs @@ -21,15 +21,19 @@ void IJsonModel(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.cs index 22589c661..cd41fb9fa 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage() { } @@ -18,7 +17,7 @@ internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage() internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage(string fileId, IDictionary serializedAdditionalRawData) { FileId = fileId; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public string FileId { get; } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.Serialization.cs index fc4ae2ba9..0dfe2e5c9 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.Serialization.cs @@ -21,19 +21,29 @@ void IJsonModel.Wr } writer.WriteStartObject(); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - if (Optional.IsDefined(InternalLogs)) + if (SerializedAdditionalRawData?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + if (SerializedAdditionalRawData?.ContainsKey("logs") != true && Optional.IsDefined(InternalLogs)) { writer.WritePropertyName("logs"u8); writer.WriteStringValue(InternalLogs); } - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -90,8 +100,9 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject Des type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.Serialization.cs index 8140f5be9..5df7a1630 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.Serialization.cs @@ -21,27 +21,40 @@ void IJsonModel.Write( } writer.WriteStartObject(); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - if (Optional.IsDefined(Id)) + if (SerializedAdditionalRawData?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + if (SerializedAdditionalRawData?.ContainsKey("id") != true && Optional.IsDefined(Id)) { writer.WritePropertyName("id"u8); writer.WriteStringValue(Id); } - writer.WritePropertyName("file_search"u8); - writer.WriteStartObject(); - foreach (var item in FileSearch) + if (SerializedAdditionalRawData?.ContainsKey("file_search") != true) { - writer.WritePropertyName(item.Key); - writer.WriteStringValue(item.Value); + writer.WritePropertyName("file_search"u8); + writer.WriteStartObject(); + foreach (var item in FileSearch) + { + writer.WritePropertyName(item.Key); + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); } - writer.WriteEndObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -109,8 +122,9 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFileSearchObject Deseria type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.Serialization.cs index b0df84cbe..4d033dc02 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.Serialization.cs @@ -21,24 +21,34 @@ void IJsonModel.Write(Ut } writer.WriteStartObject(); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - if (Optional.IsDefined(Id)) + if (SerializedAdditionalRawData?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + if (SerializedAdditionalRawData?.ContainsKey("id") != true && Optional.IsDefined(Id)) { writer.WritePropertyName("id"u8); writer.WriteStringValue(Id); } - if (Optional.IsDefined(Function)) + if (SerializedAdditionalRawData?.ContainsKey("function") != true && Optional.IsDefined(Function)) { writer.WritePropertyName("function"u8); writer.WriteObjectValue(Function, options); } - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -105,8 +115,9 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFunctionObject Deseriali type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.Serialization.cs index 9521077a6..776eb2df8 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.Serialization.cs @@ -21,17 +21,17 @@ void IJsonModel. } writer.WriteStartObject(); - if (Optional.IsDefined(Name)) + if (SerializedAdditionalRawData?.ContainsKey("name") != true && Optional.IsDefined(Name)) { writer.WritePropertyName("name"u8); writer.WriteStringValue(Name); } - if (Optional.IsDefined(Arguments)) + if (SerializedAdditionalRawData?.ContainsKey("arguments") != true && Optional.IsDefined(Arguments)) { writer.WritePropertyName("arguments"u8); writer.WriteStringValue(Arguments); } - if (Optional.IsDefined(Output)) + if (SerializedAdditionalRawData?.ContainsKey("output") != true && Optional.IsDefined(Output)) { if (Output != null) { @@ -43,10 +43,14 @@ void IJsonModel. writer.WriteNull("output"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -108,8 +112,9 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction D output = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.cs index e7d1e61d2..e546c4f89 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction() { } @@ -20,7 +19,7 @@ internal InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction(string n Name = name; Arguments = arguments; Output = output; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public string Name { get; } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.Serialization.cs index ee0218bcd..5e53319bc 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8JsonWr } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(ToolCalls)) + if (SerializedAdditionalRawData?.ContainsKey("tool_calls") != true && Optional.IsCollectionDefined(ToolCalls)) { writer.WritePropertyName("tool_calls"u8); writer.WriteStartArray(); @@ -31,12 +31,19 @@ void IJsonModel.Write(Utf8JsonWr } writer.WriteEndArray(); } - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -96,8 +103,9 @@ internal static InternalRunStepDeltaStepDetailsToolCallsObject DeserializeIntern type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs index 5b84a56d9..f9aa10e1a 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.W } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs index b4eaa646d..55b7f0b45 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal abstract partial class InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject { - private protected IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } protected InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject() { } @@ -18,7 +17,7 @@ protected InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject() internal InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject(string type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal string Type { get; set; } diff --git a/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.Serialization.cs index b8b351ece..d8c762a40 100644 --- a/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWrite } writer.WriteStartObject(); - writer.WritePropertyName("message_creation"u8); - writer.WriteObjectValue(_messageCreation, options); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("message_creation") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("message_creation"u8); + writer.WriteObjectValue(_messageCreation, options); + } + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static InternalRunStepDetailsMessageCreationObject DeserializeInternalR type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.Serialization.cs index 0c0dc4c94..7b1320b96 100644 --- a/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Writ } writer.WriteStartObject(); - writer.WritePropertyName("message_id"u8); - writer.WriteStringValue(MessageId); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("message_id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("message_id"u8); + writer.WriteStringValue(MessageId); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static InternalRunStepDetailsMessageCreationObjectMessageCreation Deser messageId = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.cs b/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.cs index 4ec8b4b68..b876ff8c4 100644 --- a/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.cs +++ b/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsMessageCreationObjectMessageCreation { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalRunStepDetailsMessageCreationObjectMessageCreation(string messageId) { Argument.AssertNotNull(messageId, nameof(messageId)); @@ -21,7 +20,7 @@ internal InternalRunStepDetailsMessageCreationObjectMessageCreation(string messa internal InternalRunStepDetailsMessageCreationObjectMessageCreation(string messageId, IDictionary serializedAdditionalRawData) { MessageId = messageId; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalRunStepDetailsMessageCreationObjectMessageCreation() diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs index 1e321f895..44349b774 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs @@ -21,19 +21,29 @@ void IJsonModel.Write( } writer.WriteStartObject(); - writer.WritePropertyName("input"u8); - writer.WriteStringValue(Input); - writer.WritePropertyName("outputs"u8); - writer.WriteStartArray(); - foreach (var item in Outputs) + if (SerializedAdditionalRawData?.ContainsKey("input") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("input"u8); + writer.WriteStringValue(Input); } - writer.WriteEndArray(); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("outputs") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("outputs"u8); + writer.WriteStartArray(); + foreach (var item in Outputs) { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -89,8 +99,9 @@ internal static InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter Deseria outputs = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.cs index 528aada10..2c309b663 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter(string input, IEnumerable outputs) { Argument.AssertNotNull(input, nameof(input)); @@ -25,7 +24,7 @@ internal InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter(string input, { Input = input; Outputs = outputs; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter() diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.Serialization.cs index 4dd28734d..4e4248784 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8 } writer.WriteStartObject(); - writer.WritePropertyName("image"u8); - writer.WriteObjectValue(_image, options); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("image") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("image"u8); + writer.WriteObjectValue(_image, options); + } + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static InternalRunStepDetailsToolCallsCodeOutputImageObject Deserialize type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs index 920b287e4..85271932d 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write } writer.WriteStartObject(); - writer.WritePropertyName("file_id"u8); - writer.WriteStringValue(FileId); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("file_id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static InternalRunStepDetailsToolCallsCodeOutputImageObjectImage Deseri fileId = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.cs index 7540b3dc4..17afb0073 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsCodeOutputImageObjectImage { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalRunStepDetailsToolCallsCodeOutputImageObjectImage(string fileId) { Argument.AssertNotNull(fileId, nameof(fileId)); @@ -21,7 +20,7 @@ internal InternalRunStepDetailsToolCallsCodeOutputImageObjectImage(string fileId internal InternalRunStepDetailsToolCallsCodeOutputImageObjectImage(string fileId, IDictionary serializedAdditionalRawData) { FileId = fileId; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalRunStepDetailsToolCallsCodeOutputImageObjectImage() diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.Serialization.cs index 26c686523..90b909e75 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.Serialization.cs @@ -21,23 +21,36 @@ void IJsonModel.Write(Utf } writer.WriteStartObject(); - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - writer.WritePropertyName("arguments"u8); - writer.WriteStringValue(Arguments); - if (Output != null) + if (SerializedAdditionalRawData?.ContainsKey("name") != true) { - writer.WritePropertyName("output"u8); - writer.WriteStringValue(Output); + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); } - else + if (SerializedAdditionalRawData?.ContainsKey("arguments") != true) { - writer.WriteNull("output"); + writer.WritePropertyName("arguments"u8); + writer.WriteStringValue(Arguments); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("output") != true) { - foreach (var item in _serializedAdditionalRawData) + if (Output != null) { + writer.WritePropertyName("output"u8); + writer.WriteStringValue(Output); + } + else + { + writer.WriteNull("output"); + } + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -99,8 +112,9 @@ internal static InternalRunStepDetailsToolCallsFunctionObjectFunction Deserializ output = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.cs index 81341cbbf..588377cde 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsFunctionObjectFunction { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalRunStepDetailsToolCallsFunctionObjectFunction(string name, string arguments, string output) { Argument.AssertNotNull(name, nameof(name)); @@ -26,7 +25,7 @@ internal InternalRunStepDetailsToolCallsFunctionObjectFunction(string name, stri Name = name; Arguments = arguments; Output = output; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalRunStepDetailsToolCallsFunctionObjectFunction() diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsObject.Serialization.cs index 66c3c8130..57154d168 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsObject.Serialization.cs @@ -21,19 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writ } writer.WriteStartObject(); - writer.WritePropertyName("tool_calls"u8); - writer.WriteStartArray(); - foreach (var item in InternalToolCalls) + if (SerializedAdditionalRawData?.ContainsKey("tool_calls") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("tool_calls"u8); + writer.WriteStartArray(); + foreach (var item in InternalToolCalls) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); } - writer.WriteEndArray(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -89,8 +99,9 @@ internal static InternalRunStepDetailsToolCallsObject DeserializeInternalRunStep type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepFileSearchToolCallDetails.Serialization.cs b/src/Generated/Models/InternalRunStepFileSearchToolCallDetails.Serialization.cs index d0fe86067..359feae65 100644 --- a/src/Generated/Models/InternalRunStepFileSearchToolCallDetails.Serialization.cs +++ b/src/Generated/Models/InternalRunStepFileSearchToolCallDetails.Serialization.cs @@ -21,23 +21,36 @@ void IJsonModel.Write(Utf8JsonWriter w } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("file_search"u8); - writer.WriteStartObject(); - foreach (var item in FileSearch) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - writer.WritePropertyName(item.Key); - writer.WriteStringValue(item.Value); + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); } - writer.WriteEndObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("file_search") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("file_search"u8); + writer.WriteStartObject(); + foreach (var item in FileSearch) { writer.WritePropertyName(item.Key); + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); #else @@ -98,8 +111,9 @@ internal static InternalRunStepFileSearchToolCallDetails DeserializeInternalRunS type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunStepFunctionToolCallDetails.Serialization.cs b/src/Generated/Models/InternalRunStepFunctionToolCallDetails.Serialization.cs index 67cc48f70..59d25eb21 100644 --- a/src/Generated/Models/InternalRunStepFunctionToolCallDetails.Serialization.cs +++ b/src/Generated/Models/InternalRunStepFunctionToolCallDetails.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter wri } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("function"u8); - writer.WriteObjectValue(_internalFunction, options); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("function") != true) + { + writer.WritePropertyName("function"u8); + writer.WriteObjectValue(_internalFunction, options); + } + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static InternalRunStepFunctionToolCallDetails DeserializeInternalRunSte type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunToolCallObjectFunction.Serialization.cs b/src/Generated/Models/InternalRunToolCallObjectFunction.Serialization.cs index 8c55e6945..ed203a144 100644 --- a/src/Generated/Models/InternalRunToolCallObjectFunction.Serialization.cs +++ b/src/Generated/Models/InternalRunToolCallObjectFunction.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - writer.WritePropertyName("arguments"u8); - writer.WriteStringValue(Arguments); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("name") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (SerializedAdditionalRawData?.ContainsKey("arguments") != true) + { + writer.WritePropertyName("arguments"u8); + writer.WriteStringValue(Arguments); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static InternalRunToolCallObjectFunction DeserializeInternalRunToolCall arguments = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalRunToolCallObjectFunction.cs b/src/Generated/Models/InternalRunToolCallObjectFunction.cs index 3d5d9f4aa..a9f72778e 100644 --- a/src/Generated/Models/InternalRunToolCallObjectFunction.cs +++ b/src/Generated/Models/InternalRunToolCallObjectFunction.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunToolCallObjectFunction { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalRunToolCallObjectFunction(string name, string arguments) { Argument.AssertNotNull(name, nameof(name)); @@ -24,7 +23,7 @@ internal InternalRunToolCallObjectFunction(string name, string arguments, IDicti { Name = name; Arguments = arguments; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalRunToolCallObjectFunction() diff --git a/src/Generated/Models/InternalStaticChunkingStrategyDetails.Serialization.cs b/src/Generated/Models/InternalStaticChunkingStrategyDetails.Serialization.cs index deb8e7f3d..954ce7d55 100644 --- a/src/Generated/Models/InternalStaticChunkingStrategyDetails.Serialization.cs +++ b/src/Generated/Models/InternalStaticChunkingStrategyDetails.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writ } writer.WriteStartObject(); - writer.WritePropertyName("max_chunk_size_tokens"u8); - writer.WriteNumberValue(MaxChunkSizeTokens); - writer.WritePropertyName("chunk_overlap_tokens"u8); - writer.WriteNumberValue(ChunkOverlapTokens); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("max_chunk_size_tokens") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("max_chunk_size_tokens"u8); + writer.WriteNumberValue(MaxChunkSizeTokens); + } + if (SerializedAdditionalRawData?.ContainsKey("chunk_overlap_tokens") != true) + { + writer.WritePropertyName("chunk_overlap_tokens"u8); + writer.WriteNumberValue(ChunkOverlapTokens); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static InternalStaticChunkingStrategyDetails DeserializeInternalStaticC chunkOverlapTokens = property.Value.GetInt32(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalStaticChunkingStrategyDetails.cs b/src/Generated/Models/InternalStaticChunkingStrategyDetails.cs index 051e45552..26a6aa2e1 100644 --- a/src/Generated/Models/InternalStaticChunkingStrategyDetails.cs +++ b/src/Generated/Models/InternalStaticChunkingStrategyDetails.cs @@ -9,8 +9,7 @@ namespace OpenAI.VectorStores { internal partial class InternalStaticChunkingStrategyDetails { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalStaticChunkingStrategyDetails(int maxChunkSizeTokens, int chunkOverlapTokens) { MaxChunkSizeTokens = maxChunkSizeTokens; @@ -21,7 +20,7 @@ internal InternalStaticChunkingStrategyDetails(int maxChunkSizeTokens, int chunk { MaxChunkSizeTokens = maxChunkSizeTokens; ChunkOverlapTokens = chunkOverlapTokens; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalStaticChunkingStrategyDetails() diff --git a/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.Serialization.cs b/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.Serialization.cs index 881cfebff..a8c791dfe 100644 --- a/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.Serialization.cs +++ b/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter } writer.WriteStartObject(); - writer.WritePropertyName("static"u8); - writer.WriteObjectValue(Static, options); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("static") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("static"u8); + writer.WriteObjectValue(Static, options); + } + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static InternalStaticChunkingStrategyRequestParam DeserializeInternalSt type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalSubmitToolOutputsRunRequest.Serialization.cs b/src/Generated/Models/InternalSubmitToolOutputsRunRequest.Serialization.cs index 1b2dea6a4..2db0da4f3 100644 --- a/src/Generated/Models/InternalSubmitToolOutputsRunRequest.Serialization.cs +++ b/src/Generated/Models/InternalSubmitToolOutputsRunRequest.Serialization.cs @@ -21,14 +21,17 @@ void IJsonModel.Write(Utf8JsonWriter writer } writer.WriteStartObject(); - writer.WritePropertyName("tool_outputs"u8); - writer.WriteStartArray(); - foreach (var item in ToolOutputs) + if (SerializedAdditionalRawData?.ContainsKey("tool_outputs") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("tool_outputs"u8); + writer.WriteStartArray(); + foreach (var item in ToolOutputs) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); } - writer.WriteEndArray(); - if (Optional.IsDefined(Stream)) + if (SerializedAdditionalRawData?.ContainsKey("stream") != true && Optional.IsDefined(Stream)) { if (Stream != null) { @@ -40,10 +43,14 @@ void IJsonModel.Write(Utf8JsonWriter writer writer.WriteNull("stream"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -104,8 +111,9 @@ internal static InternalSubmitToolOutputsRunRequest DeserializeInternalSubmitToo stream = property.Value.GetBoolean(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalSubmitToolOutputsRunRequest.cs b/src/Generated/Models/InternalSubmitToolOutputsRunRequest.cs index e602133ba..13a442914 100644 --- a/src/Generated/Models/InternalSubmitToolOutputsRunRequest.cs +++ b/src/Generated/Models/InternalSubmitToolOutputsRunRequest.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { internal partial class InternalSubmitToolOutputsRunRequest { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public InternalSubmitToolOutputsRunRequest(IEnumerable toolOutputs) { Argument.AssertNotNull(toolOutputs, nameof(toolOutputs)); @@ -23,7 +22,7 @@ internal InternalSubmitToolOutputsRunRequest(IList toolOutputs, bool { ToolOutputs = toolOutputs; Stream = stream; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalSubmitToolOutputsRunRequest() diff --git a/src/Generated/Models/InternalThreadObjectToolResources.Serialization.cs b/src/Generated/Models/InternalThreadObjectToolResources.Serialization.cs index 72b3657cf..c5a8f2055 100644 --- a/src/Generated/Models/InternalThreadObjectToolResources.Serialization.cs +++ b/src/Generated/Models/InternalThreadObjectToolResources.Serialization.cs @@ -21,20 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - if (Optional.IsDefined(CodeInterpreter)) + if (SerializedAdditionalRawData?.ContainsKey("code_interpreter") != true && Optional.IsDefined(CodeInterpreter)) { writer.WritePropertyName("code_interpreter"u8); writer.WriteObjectValue(CodeInterpreter, options); } - if (Optional.IsDefined(FileSearch)) + if (SerializedAdditionalRawData?.ContainsKey("file_search") != true && Optional.IsDefined(FileSearch)) { writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -93,8 +97,9 @@ internal static InternalThreadObjectToolResources DeserializeInternalThreadObjec fileSearch = InternalThreadObjectToolResourcesFileSearch.DeserializeInternalThreadObjectToolResourcesFileSearch(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalThreadObjectToolResources.cs b/src/Generated/Models/InternalThreadObjectToolResources.cs index de8ac491f..5d766bb62 100644 --- a/src/Generated/Models/InternalThreadObjectToolResources.cs +++ b/src/Generated/Models/InternalThreadObjectToolResources.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalThreadObjectToolResources { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalThreadObjectToolResources() { } @@ -19,7 +18,7 @@ internal InternalThreadObjectToolResources(InternalThreadObjectToolResourcesCode { CodeInterpreter = codeInterpreter; FileSearch = fileSearch; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public InternalThreadObjectToolResourcesCodeInterpreter CodeInterpreter { get; } diff --git a/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.Serialization.cs index c04745ed8..d60b3eeef 100644 --- a/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8Json } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(FileIds)) + if (SerializedAdditionalRawData?.ContainsKey("file_ids") != true && Optional.IsCollectionDefined(FileIds)) { writer.WritePropertyName("file_ids"u8); writer.WriteStartArray(); @@ -31,10 +31,14 @@ void IJsonModel.Write(Utf8Json } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -88,8 +92,9 @@ internal static InternalThreadObjectToolResourcesCodeInterpreter DeserializeInte fileIds = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.cs b/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.cs index 68671b7b0..ddcfa61ee 100644 --- a/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.cs +++ b/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalThreadObjectToolResourcesCodeInterpreter { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalThreadObjectToolResourcesCodeInterpreter() { FileIds = new ChangeTrackingList(); @@ -19,7 +18,7 @@ internal InternalThreadObjectToolResourcesCodeInterpreter() internal InternalThreadObjectToolResourcesCodeInterpreter(IReadOnlyList fileIds, IDictionary serializedAdditionalRawData) { FileIds = fileIds; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IReadOnlyList FileIds { get; } diff --git a/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.Serialization.cs b/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.Serialization.cs index 621a90336..63b7217cf 100644 --- a/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.Serialization.cs +++ b/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8JsonWrite } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(VectorStoreIds)) + if (SerializedAdditionalRawData?.ContainsKey("vector_store_ids") != true && Optional.IsCollectionDefined(VectorStoreIds)) { writer.WritePropertyName("vector_store_ids"u8); writer.WriteStartArray(); @@ -31,10 +31,14 @@ void IJsonModel.Write(Utf8JsonWrite } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -88,8 +92,9 @@ internal static InternalThreadObjectToolResourcesFileSearch DeserializeInternalT vectorStoreIds = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.cs b/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.cs index f93de28a0..4214562af 100644 --- a/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.cs +++ b/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class InternalThreadObjectToolResourcesFileSearch { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalThreadObjectToolResourcesFileSearch() { VectorStoreIds = new ChangeTrackingList(); @@ -19,7 +18,7 @@ internal InternalThreadObjectToolResourcesFileSearch() internal InternalThreadObjectToolResourcesFileSearch(IReadOnlyList vectorStoreIds, IDictionary serializedAdditionalRawData) { VectorStoreIds = vectorStoreIds; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public IReadOnlyList VectorStoreIds { get; } diff --git a/src/Generated/Models/InternalUnknownChunkingStrategy.Serialization.cs b/src/Generated/Models/InternalUnknownChunkingStrategy.Serialization.cs index 9f9a663d9..8d9ba385b 100644 --- a/src/Generated/Models/InternalUnknownChunkingStrategy.Serialization.cs +++ b/src/Generated/Models/InternalUnknownChunkingStrategy.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static InternalUnknownChunkingStrategy DeserializeInternalUnknownChunki type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalUnknownFileChunkingStrategyRequestParamProxy.Serialization.cs b/src/Generated/Models/InternalUnknownFileChunkingStrategyRequestParamProxy.Serialization.cs index 2f6c829a3..e7d498383 100644 --- a/src/Generated/Models/InternalUnknownFileChunkingStrategyRequestParamProxy.Serialization.cs +++ b/src/Generated/Models/InternalUnknownFileChunkingStrategyRequestParamProxy.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter w } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static InternalUnknownFileChunkingStrategyRequestParamProxy Deserialize type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalUnknownFileChunkingStrategyResponseParamProxy.Serialization.cs b/src/Generated/Models/InternalUnknownFileChunkingStrategyResponseParamProxy.Serialization.cs index f4b8d85bf..81222645e 100644 --- a/src/Generated/Models/InternalUnknownFileChunkingStrategyResponseParamProxy.Serialization.cs +++ b/src/Generated/Models/InternalUnknownFileChunkingStrategyResponseParamProxy.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWr } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static InternalUnknownFileChunkingStrategyResponseParamProxy Deserializ type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalVectorStoreFileBatchObjectFileCounts.Serialization.cs b/src/Generated/Models/InternalVectorStoreFileBatchObjectFileCounts.Serialization.cs index 79f93929a..8e7dfc44d 100644 --- a/src/Generated/Models/InternalVectorStoreFileBatchObjectFileCounts.Serialization.cs +++ b/src/Generated/Models/InternalVectorStoreFileBatchObjectFileCounts.Serialization.cs @@ -21,20 +21,39 @@ void IJsonModel.Write(Utf8JsonWrit } writer.WriteStartObject(); - writer.WritePropertyName("in_progress"u8); - writer.WriteNumberValue(InProgress); - writer.WritePropertyName("completed"u8); - writer.WriteNumberValue(Completed); - writer.WritePropertyName("failed"u8); - writer.WriteNumberValue(Failed); - writer.WritePropertyName("cancelled"u8); - writer.WriteNumberValue(Cancelled); - writer.WritePropertyName("total"u8); - writer.WriteNumberValue(Total); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("in_progress") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("in_progress"u8); + writer.WriteNumberValue(InProgress); + } + if (SerializedAdditionalRawData?.ContainsKey("completed") != true) + { + writer.WritePropertyName("completed"u8); + writer.WriteNumberValue(Completed); + } + if (SerializedAdditionalRawData?.ContainsKey("failed") != true) + { + writer.WritePropertyName("failed"u8); + writer.WriteNumberValue(Failed); + } + if (SerializedAdditionalRawData?.ContainsKey("cancelled") != true) + { + writer.WritePropertyName("cancelled"u8); + writer.WriteNumberValue(Cancelled); + } + if (SerializedAdditionalRawData?.ContainsKey("total") != true) + { + writer.WritePropertyName("total"u8); + writer.WriteNumberValue(Total); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -103,8 +122,9 @@ internal static InternalVectorStoreFileBatchObjectFileCounts DeserializeInternal total = property.Value.GetInt32(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/InternalVectorStoreFileBatchObjectFileCounts.cs b/src/Generated/Models/InternalVectorStoreFileBatchObjectFileCounts.cs index ec07b6761..03849395d 100644 --- a/src/Generated/Models/InternalVectorStoreFileBatchObjectFileCounts.cs +++ b/src/Generated/Models/InternalVectorStoreFileBatchObjectFileCounts.cs @@ -9,8 +9,7 @@ namespace OpenAI.VectorStores { internal partial class InternalVectorStoreFileBatchObjectFileCounts { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal InternalVectorStoreFileBatchObjectFileCounts(int inProgress, int completed, int failed, int cancelled, int total) { InProgress = inProgress; @@ -27,7 +26,7 @@ internal InternalVectorStoreFileBatchObjectFileCounts(int inProgress, int comple Failed = failed; Cancelled = cancelled; Total = total; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal InternalVectorStoreFileBatchObjectFileCounts() diff --git a/src/Generated/Models/MessageContent.cs b/src/Generated/Models/MessageContent.cs index 118f79f6f..cee79aaec 100644 --- a/src/Generated/Models/MessageContent.cs +++ b/src/Generated/Models/MessageContent.cs @@ -9,11 +9,11 @@ namespace OpenAI.Assistants { public abstract partial class MessageContent { - private protected IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal MessageContent(IDictionary serializedAdditionalRawData) { - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } } } diff --git a/src/Generated/Models/MessageContentTextAnnotationsFileCitationObject.Serialization.cs b/src/Generated/Models/MessageContentTextAnnotationsFileCitationObject.Serialization.cs index f76ab3eb2..72de78084 100644 --- a/src/Generated/Models/MessageContentTextAnnotationsFileCitationObject.Serialization.cs +++ b/src/Generated/Models/MessageContentTextAnnotationsFileCitationObject.Serialization.cs @@ -21,20 +21,39 @@ void IJsonModel.Write(Utf8JsonW } writer.WriteStartObject(); - writer.WritePropertyName("text"u8); - writer.WriteStringValue(Text); - writer.WritePropertyName("file_citation"u8); - writer.WriteObjectValue(FileCitation, options); - writer.WritePropertyName("start_index"u8); - writer.WriteNumberValue(StartIndex); - writer.WritePropertyName("end_index"u8); - writer.WriteNumberValue(EndIndex); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("text") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + if (SerializedAdditionalRawData?.ContainsKey("file_citation") != true) + { + writer.WritePropertyName("file_citation"u8); + writer.WriteObjectValue(FileCitation, options); + } + if (SerializedAdditionalRawData?.ContainsKey("start_index") != true) + { + writer.WritePropertyName("start_index"u8); + writer.WriteNumberValue(StartIndex); + } + if (SerializedAdditionalRawData?.ContainsKey("end_index") != true) + { + writer.WritePropertyName("end_index"u8); + writer.WriteNumberValue(EndIndex); + } + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -103,8 +122,9 @@ internal static MessageContentTextAnnotationsFileCitationObject DeserializeMessa type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageContentTextAnnotationsFileCitationObject.cs b/src/Generated/Models/MessageContentTextAnnotationsFileCitationObject.cs index db2c49dc1..4e93ad29f 100644 --- a/src/Generated/Models/MessageContentTextAnnotationsFileCitationObject.cs +++ b/src/Generated/Models/MessageContentTextAnnotationsFileCitationObject.cs @@ -33,9 +33,9 @@ internal MessageContentTextAnnotationsFileCitationObject() { } - public string Text { get; init; } - public InternalMessageContentTextAnnotationsFileCitationObjectFileCitation FileCitation { get; init; } - public int StartIndex { get; init; } - public int EndIndex { get; init; } + public string Text { get; set; } + public InternalMessageContentTextAnnotationsFileCitationObjectFileCitation FileCitation { get; set; } + public int StartIndex { get; set; } + public int EndIndex { get; set; } } } diff --git a/src/Generated/Models/MessageContentTextAnnotationsFilePathObject.Serialization.cs b/src/Generated/Models/MessageContentTextAnnotationsFilePathObject.Serialization.cs index 394556481..e87842425 100644 --- a/src/Generated/Models/MessageContentTextAnnotationsFilePathObject.Serialization.cs +++ b/src/Generated/Models/MessageContentTextAnnotationsFilePathObject.Serialization.cs @@ -21,20 +21,39 @@ void IJsonModel.Write(Utf8JsonWrite } writer.WriteStartObject(); - writer.WritePropertyName("text"u8); - writer.WriteStringValue(Text); - writer.WritePropertyName("file_path"u8); - writer.WriteObjectValue(FilePath, options); - writer.WritePropertyName("start_index"u8); - writer.WriteNumberValue(StartIndex); - writer.WritePropertyName("end_index"u8); - writer.WriteNumberValue(EndIndex); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("text") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + if (SerializedAdditionalRawData?.ContainsKey("file_path") != true) + { + writer.WritePropertyName("file_path"u8); + writer.WriteObjectValue(FilePath, options); + } + if (SerializedAdditionalRawData?.ContainsKey("start_index") != true) + { + writer.WritePropertyName("start_index"u8); + writer.WriteNumberValue(StartIndex); + } + if (SerializedAdditionalRawData?.ContainsKey("end_index") != true) + { + writer.WritePropertyName("end_index"u8); + writer.WriteNumberValue(EndIndex); + } + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -103,8 +122,9 @@ internal static MessageContentTextAnnotationsFilePathObject DeserializeMessageCo type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageContentTextAnnotationsFilePathObject.cs b/src/Generated/Models/MessageContentTextAnnotationsFilePathObject.cs index 7b714416f..197bfb5b0 100644 --- a/src/Generated/Models/MessageContentTextAnnotationsFilePathObject.cs +++ b/src/Generated/Models/MessageContentTextAnnotationsFilePathObject.cs @@ -33,9 +33,9 @@ internal MessageContentTextAnnotationsFilePathObject() { } - public string Text { get; init; } - public InternalMessageContentTextAnnotationsFilePathObjectFilePath FilePath { get; init; } - public int StartIndex { get; init; } - public int EndIndex { get; init; } + public string Text { get; set; } + public InternalMessageContentTextAnnotationsFilePathObjectFilePath FilePath { get; set; } + public int StartIndex { get; set; } + public int EndIndex { get; set; } } } diff --git a/src/Generated/Models/MessageContentTextObjectAnnotation.Serialization.cs b/src/Generated/Models/MessageContentTextObjectAnnotation.Serialization.cs index cb9573236..3b2495f19 100644 --- a/src/Generated/Models/MessageContentTextObjectAnnotation.Serialization.cs +++ b/src/Generated/Models/MessageContentTextObjectAnnotation.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); diff --git a/src/Generated/Models/MessageContentTextObjectAnnotation.cs b/src/Generated/Models/MessageContentTextObjectAnnotation.cs index a2ee673ee..d2a7e6648 100644 --- a/src/Generated/Models/MessageContentTextObjectAnnotation.cs +++ b/src/Generated/Models/MessageContentTextObjectAnnotation.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal abstract partial class MessageContentTextObjectAnnotation { - private protected IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } protected MessageContentTextObjectAnnotation() { } @@ -18,9 +17,9 @@ protected MessageContentTextObjectAnnotation() internal MessageContentTextObjectAnnotation(string type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - internal string Type { get; init; } + internal string Type { get; set; } } } diff --git a/src/Generated/Models/MessageContentTextObjectText.Serialization.cs b/src/Generated/Models/MessageContentTextObjectText.Serialization.cs index 4dea6d768..ef26c9537 100644 --- a/src/Generated/Models/MessageContentTextObjectText.Serialization.cs +++ b/src/Generated/Models/MessageContentTextObjectText.Serialization.cs @@ -21,19 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model } writer.WriteStartObject(); - writer.WritePropertyName("value"u8); - writer.WriteStringValue(Value); - writer.WritePropertyName("annotations"u8); - writer.WriteStartArray(); - foreach (var item in Annotations) + if (SerializedAdditionalRawData?.ContainsKey("value") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("value"u8); + writer.WriteStringValue(Value); } - writer.WriteEndArray(); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("annotations") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("annotations"u8); + writer.WriteStartArray(); + foreach (var item in Annotations) { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -89,8 +99,9 @@ internal static MessageContentTextObjectText DeserializeMessageContentTextObject annotations = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageContentTextObjectText.cs b/src/Generated/Models/MessageContentTextObjectText.cs index 847d3d84b..877d42707 100644 --- a/src/Generated/Models/MessageContentTextObjectText.cs +++ b/src/Generated/Models/MessageContentTextObjectText.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { internal partial class MessageContentTextObjectText { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public MessageContentTextObjectText(string value, IEnumerable annotations) { Argument.AssertNotNull(value, nameof(value)); @@ -25,14 +24,14 @@ internal MessageContentTextObjectText(string value, IList Annotations { get; } } } diff --git a/src/Generated/Models/MessageCreationAttachment.Serialization.cs b/src/Generated/Models/MessageCreationAttachment.Serialization.cs index ac0167def..720232eb9 100644 --- a/src/Generated/Models/MessageCreationAttachment.Serialization.cs +++ b/src/Generated/Models/MessageCreationAttachment.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea } writer.WriteStartObject(); - writer.WritePropertyName("file_id"u8); - writer.WriteStringValue(FileId); - writer.WritePropertyName("tools"u8); - SerializeTools(writer, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("file_id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + if (SerializedAdditionalRawData?.ContainsKey("tools") != true) + { + writer.WritePropertyName("tools"u8); + SerializeTools(writer, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static MessageCreationAttachment DeserializeMessageCreationAttachment(J DeserializeTools(property, ref tools); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageCreationAttachment.cs b/src/Generated/Models/MessageCreationAttachment.cs index 8844ef79e..3def69b58 100644 --- a/src/Generated/Models/MessageCreationAttachment.cs +++ b/src/Generated/Models/MessageCreationAttachment.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { public partial class MessageCreationAttachment { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public MessageCreationAttachment(string fileId, IEnumerable tools) { Argument.AssertNotNull(fileId, nameof(fileId)); @@ -25,7 +24,7 @@ internal MessageCreationAttachment(string fileId, IReadOnlyList { FileId = fileId; Tools = tools; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal MessageCreationAttachment() diff --git a/src/Generated/Models/MessageCreationOptions.Serialization.cs b/src/Generated/Models/MessageCreationOptions.Serialization.cs index f4baa938e..5a3e69de0 100644 --- a/src/Generated/Models/MessageCreationOptions.Serialization.cs +++ b/src/Generated/Models/MessageCreationOptions.Serialization.cs @@ -21,11 +21,17 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader } writer.WriteStartObject(); - writer.WritePropertyName("role"u8); - writer.WriteStringValue(Role.ToSerialString()); - writer.WritePropertyName("content"u8); - SerializeContent(writer, options); - if (Optional.IsCollectionDefined(Attachments)) + if (SerializedAdditionalRawData?.ContainsKey("role") != true) + { + writer.WritePropertyName("role"u8); + writer.WriteStringValue(Role.ToSerialString()); + } + if (SerializedAdditionalRawData?.ContainsKey("content") != true) + { + writer.WritePropertyName("content"u8); + SerializeContent(writer, options); + } + if (SerializedAdditionalRawData?.ContainsKey("attachments") != true && Optional.IsCollectionDefined(Attachments)) { if (Attachments != null) { @@ -42,7 +48,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteNull("attachments"); } } - if (Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true && Optional.IsCollectionDefined(Metadata)) { if (Metadata != null) { @@ -60,10 +66,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteNull("metadata"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -149,8 +159,9 @@ internal static MessageCreationOptions DeserializeMessageCreationOptions(JsonEle metadata = dictionary; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageCreationOptions.cs b/src/Generated/Models/MessageCreationOptions.cs index 85f6ee95f..123344624 100644 --- a/src/Generated/Models/MessageCreationOptions.cs +++ b/src/Generated/Models/MessageCreationOptions.cs @@ -10,7 +10,7 @@ namespace OpenAI.Assistants { public partial class MessageCreationOptions { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal MessageCreationOptions(MessageRole role, IList content, IList attachments, IDictionary metadata, IDictionary serializedAdditionalRawData) { @@ -18,9 +18,9 @@ internal MessageCreationOptions(MessageRole role, IList content, Content = content; Attachments = attachments; Metadata = metadata; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public IList Attachments { get; } - public IDictionary Metadata { get; } + public IList Attachments { get; set; } + public IDictionary Metadata { get; set; } } } diff --git a/src/Generated/Models/MessageDeltaContent.Serialization.cs b/src/Generated/Models/MessageDeltaContent.Serialization.cs index f6deddaf6..9de25d996 100644 --- a/src/Generated/Models/MessageDeltaContent.Serialization.cs +++ b/src/Generated/Models/MessageDeltaContent.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWri } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); diff --git a/src/Generated/Models/MessageDeltaContent.cs b/src/Generated/Models/MessageDeltaContent.cs index ab303bd97..af9b4a2da 100644 --- a/src/Generated/Models/MessageDeltaContent.cs +++ b/src/Generated/Models/MessageDeltaContent.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal abstract partial class MessageDeltaContent { - private protected IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } protected MessageDeltaContent() { } @@ -18,9 +17,9 @@ protected MessageDeltaContent() internal MessageDeltaContent(string type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - internal string Type { get; init; } + internal string Type { get; set; } } } diff --git a/src/Generated/Models/MessageDeltaContentImageFileObject.Serialization.cs b/src/Generated/Models/MessageDeltaContentImageFileObject.Serialization.cs index da1dd2d0e..7e3b037b4 100644 --- a/src/Generated/Models/MessageDeltaContentImageFileObject.Serialization.cs +++ b/src/Generated/Models/MessageDeltaContentImageFileObject.Serialization.cs @@ -21,19 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - if (Optional.IsDefined(ImageFile)) + if (SerializedAdditionalRawData?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + if (SerializedAdditionalRawData?.ContainsKey("image_file") != true && Optional.IsDefined(ImageFile)) { writer.WritePropertyName("image_file"u8); writer.WriteObjectValue(ImageFile, options); } - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -94,8 +104,9 @@ internal static MessageDeltaContentImageFileObject DeserializeMessageDeltaConten type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageDeltaContentImageFileObjectImageFile.Serialization.cs b/src/Generated/Models/MessageDeltaContentImageFileObjectImageFile.Serialization.cs index 33a538d74..dfde5e919 100644 --- a/src/Generated/Models/MessageDeltaContentImageFileObjectImageFile.Serialization.cs +++ b/src/Generated/Models/MessageDeltaContentImageFileObjectImageFile.Serialization.cs @@ -21,20 +21,24 @@ void IJsonModel.Write(Utf8JsonWrite } writer.WriteStartObject(); - if (Optional.IsDefined(FileId)) + if (SerializedAdditionalRawData?.ContainsKey("file_id") != true && Optional.IsDefined(FileId)) { writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } - if (Optional.IsDefined(Detail)) + if (SerializedAdditionalRawData?.ContainsKey("detail") != true && Optional.IsDefined(Detail)) { writer.WritePropertyName("detail"u8); writer.WriteStringValue(Detail); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -85,8 +89,9 @@ internal static MessageDeltaContentImageFileObjectImageFile DeserializeMessageDe detail = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageDeltaContentImageFileObjectImageFile.cs b/src/Generated/Models/MessageDeltaContentImageFileObjectImageFile.cs index 283c74923..a48270e77 100644 --- a/src/Generated/Models/MessageDeltaContentImageFileObjectImageFile.cs +++ b/src/Generated/Models/MessageDeltaContentImageFileObjectImageFile.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class MessageDeltaContentImageFileObjectImageFile { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal MessageDeltaContentImageFileObjectImageFile() { } @@ -19,7 +18,7 @@ internal MessageDeltaContentImageFileObjectImageFile(string fileId, string detai { FileId = fileId; Detail = detail; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public string FileId { get; } diff --git a/src/Generated/Models/MessageDeltaContentImageUrlObject.Serialization.cs b/src/Generated/Models/MessageDeltaContentImageUrlObject.Serialization.cs index dd9889d3a..5bcbcf94f 100644 --- a/src/Generated/Models/MessageDeltaContentImageUrlObject.Serialization.cs +++ b/src/Generated/Models/MessageDeltaContentImageUrlObject.Serialization.cs @@ -21,19 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - if (Optional.IsDefined(ImageUrl)) + if (SerializedAdditionalRawData?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + if (SerializedAdditionalRawData?.ContainsKey("image_url") != true && Optional.IsDefined(ImageUrl)) { writer.WritePropertyName("image_url"u8); writer.WriteObjectValue(ImageUrl, options); } - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -94,8 +104,9 @@ internal static MessageDeltaContentImageUrlObject DeserializeMessageDeltaContent type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageDeltaContentImageUrlObjectImageUrl.Serialization.cs b/src/Generated/Models/MessageDeltaContentImageUrlObjectImageUrl.Serialization.cs index 07b8bf20b..f5a3e4c13 100644 --- a/src/Generated/Models/MessageDeltaContentImageUrlObjectImageUrl.Serialization.cs +++ b/src/Generated/Models/MessageDeltaContentImageUrlObjectImageUrl.Serialization.cs @@ -21,20 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter } writer.WriteStartObject(); - if (Optional.IsDefined(Url)) + if (SerializedAdditionalRawData?.ContainsKey("url") != true && Optional.IsDefined(Url)) { writer.WritePropertyName("url"u8); writer.WriteStringValue(Url.AbsoluteUri); } - if (Optional.IsDefined(Detail)) + if (SerializedAdditionalRawData?.ContainsKey("detail") != true && Optional.IsDefined(Detail)) { writer.WritePropertyName("detail"u8); writer.WriteStringValue(Detail); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -89,8 +93,9 @@ internal static MessageDeltaContentImageUrlObjectImageUrl DeserializeMessageDelt detail = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageDeltaContentImageUrlObjectImageUrl.cs b/src/Generated/Models/MessageDeltaContentImageUrlObjectImageUrl.cs index 8389da101..3675f30c0 100644 --- a/src/Generated/Models/MessageDeltaContentImageUrlObjectImageUrl.cs +++ b/src/Generated/Models/MessageDeltaContentImageUrlObjectImageUrl.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class MessageDeltaContentImageUrlObjectImageUrl { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal MessageDeltaContentImageUrlObjectImageUrl() { } @@ -19,7 +18,7 @@ internal MessageDeltaContentImageUrlObjectImageUrl(Uri url, string detail, IDict { Url = url; Detail = detail; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public Uri Url { get; } diff --git a/src/Generated/Models/MessageDeltaContentTextAnnotationsFileCitationObject.Serialization.cs b/src/Generated/Models/MessageDeltaContentTextAnnotationsFileCitationObject.Serialization.cs index 8214cf4ce..0cb5bb9a3 100644 --- a/src/Generated/Models/MessageDeltaContentTextAnnotationsFileCitationObject.Serialization.cs +++ b/src/Generated/Models/MessageDeltaContentTextAnnotationsFileCitationObject.Serialization.cs @@ -21,34 +21,44 @@ void IJsonModel.Write(Utf8 } writer.WriteStartObject(); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - if (Optional.IsDefined(Text)) + if (SerializedAdditionalRawData?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + if (SerializedAdditionalRawData?.ContainsKey("text") != true && Optional.IsDefined(Text)) { writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } - if (Optional.IsDefined(FileCitation)) + if (SerializedAdditionalRawData?.ContainsKey("file_citation") != true && Optional.IsDefined(FileCitation)) { writer.WritePropertyName("file_citation"u8); writer.WriteObjectValue(FileCitation, options); } - if (Optional.IsDefined(StartIndex)) + if (SerializedAdditionalRawData?.ContainsKey("start_index") != true && Optional.IsDefined(StartIndex)) { writer.WritePropertyName("start_index"u8); writer.WriteNumberValue(StartIndex.Value); } - if (Optional.IsDefined(EndIndex)) + if (SerializedAdditionalRawData?.ContainsKey("end_index") != true && Optional.IsDefined(EndIndex)) { writer.WritePropertyName("end_index"u8); writer.WriteNumberValue(EndIndex.Value); } - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -135,8 +145,9 @@ internal static MessageDeltaContentTextAnnotationsFileCitationObject Deserialize type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs b/src/Generated/Models/MessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs index 94e1a842f..0ec64a166 100644 --- a/src/Generated/Models/MessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs +++ b/src/Generated/Models/MessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs @@ -21,20 +21,24 @@ void IJsonModel(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.cs b/src/Generated/Models/MessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.cs index b6c3f0fab..c5ecd39ee 100644 --- a/src/Generated/Models/MessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.cs +++ b/src/Generated/Models/MessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class MessageDeltaContentTextAnnotationsFileCitationObjectFileCitation { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal MessageDeltaContentTextAnnotationsFileCitationObjectFileCitation() { } @@ -19,7 +18,7 @@ internal MessageDeltaContentTextAnnotationsFileCitationObjectFileCitation(string { FileId = fileId; Quote = quote; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public string FileId { get; } diff --git a/src/Generated/Models/MessageDeltaContentTextAnnotationsFilePathObject.Serialization.cs b/src/Generated/Models/MessageDeltaContentTextAnnotationsFilePathObject.Serialization.cs index 3efc3bf92..880797294 100644 --- a/src/Generated/Models/MessageDeltaContentTextAnnotationsFilePathObject.Serialization.cs +++ b/src/Generated/Models/MessageDeltaContentTextAnnotationsFilePathObject.Serialization.cs @@ -21,34 +21,44 @@ void IJsonModel.Write(Utf8Json } writer.WriteStartObject(); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - if (Optional.IsDefined(Text)) + if (SerializedAdditionalRawData?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + if (SerializedAdditionalRawData?.ContainsKey("text") != true && Optional.IsDefined(Text)) { writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } - if (Optional.IsDefined(FilePath)) + if (SerializedAdditionalRawData?.ContainsKey("file_path") != true && Optional.IsDefined(FilePath)) { writer.WritePropertyName("file_path"u8); writer.WriteObjectValue(FilePath, options); } - if (Optional.IsDefined(StartIndex)) + if (SerializedAdditionalRawData?.ContainsKey("start_index") != true && Optional.IsDefined(StartIndex)) { writer.WritePropertyName("start_index"u8); writer.WriteNumberValue(StartIndex.Value); } - if (Optional.IsDefined(EndIndex)) + if (SerializedAdditionalRawData?.ContainsKey("end_index") != true && Optional.IsDefined(EndIndex)) { writer.WritePropertyName("end_index"u8); writer.WriteNumberValue(EndIndex.Value); } - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -135,8 +145,9 @@ internal static MessageDeltaContentTextAnnotationsFilePathObject DeserializeMess type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageDeltaContentTextAnnotationsFilePathObjectFilePath.Serialization.cs b/src/Generated/Models/MessageDeltaContentTextAnnotationsFilePathObjectFilePath.Serialization.cs index 1c2f0931e..290ec5cb6 100644 --- a/src/Generated/Models/MessageDeltaContentTextAnnotationsFilePathObjectFilePath.Serialization.cs +++ b/src/Generated/Models/MessageDeltaContentTextAnnotationsFilePathObjectFilePath.Serialization.cs @@ -21,15 +21,19 @@ void IJsonModel.Write( } writer.WriteStartObject(); - if (Optional.IsDefined(FileId)) + if (SerializedAdditionalRawData?.ContainsKey("file_id") != true && Optional.IsDefined(FileId)) { writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -74,8 +78,9 @@ internal static MessageDeltaContentTextAnnotationsFilePathObjectFilePath Deseria fileId = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageDeltaContentTextAnnotationsFilePathObjectFilePath.cs b/src/Generated/Models/MessageDeltaContentTextAnnotationsFilePathObjectFilePath.cs index 54e2fa689..570354bff 100644 --- a/src/Generated/Models/MessageDeltaContentTextAnnotationsFilePathObjectFilePath.cs +++ b/src/Generated/Models/MessageDeltaContentTextAnnotationsFilePathObjectFilePath.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class MessageDeltaContentTextAnnotationsFilePathObjectFilePath { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal MessageDeltaContentTextAnnotationsFilePathObjectFilePath() { } @@ -18,7 +17,7 @@ internal MessageDeltaContentTextAnnotationsFilePathObjectFilePath() internal MessageDeltaContentTextAnnotationsFilePathObjectFilePath(string fileId, IDictionary serializedAdditionalRawData) { FileId = fileId; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public string FileId { get; } diff --git a/src/Generated/Models/MessageDeltaContentTextObject.Serialization.cs b/src/Generated/Models/MessageDeltaContentTextObject.Serialization.cs index e56a2c548..d80da1ecf 100644 --- a/src/Generated/Models/MessageDeltaContentTextObject.Serialization.cs +++ b/src/Generated/Models/MessageDeltaContentTextObject.Serialization.cs @@ -21,19 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mode } writer.WriteStartObject(); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - if (Optional.IsDefined(Text)) + if (SerializedAdditionalRawData?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + if (SerializedAdditionalRawData?.ContainsKey("text") != true && Optional.IsDefined(Text)) { writer.WritePropertyName("text"u8); writer.WriteObjectValue(Text, options); } - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -94,8 +104,9 @@ internal static MessageDeltaContentTextObject DeserializeMessageDeltaContentText type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageDeltaContentTextObjectText.Serialization.cs b/src/Generated/Models/MessageDeltaContentTextObjectText.Serialization.cs index daeeefa9a..2faf63f3a 100644 --- a/src/Generated/Models/MessageDeltaContentTextObjectText.Serialization.cs +++ b/src/Generated/Models/MessageDeltaContentTextObjectText.Serialization.cs @@ -21,12 +21,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - if (Optional.IsDefined(Value)) + if (SerializedAdditionalRawData?.ContainsKey("value") != true && Optional.IsDefined(Value)) { writer.WritePropertyName("value"u8); writer.WriteStringValue(Value); } - if (Optional.IsCollectionDefined(Annotations)) + if (SerializedAdditionalRawData?.ContainsKey("annotations") != true && Optional.IsCollectionDefined(Annotations)) { writer.WritePropertyName("annotations"u8); writer.WriteStartArray(); @@ -36,10 +36,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -99,8 +103,9 @@ internal static MessageDeltaContentTextObjectText DeserializeMessageDeltaContent annotations = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageDeltaContentTextObjectText.cs b/src/Generated/Models/MessageDeltaContentTextObjectText.cs index 98c1aafd2..ff20203d0 100644 --- a/src/Generated/Models/MessageDeltaContentTextObjectText.cs +++ b/src/Generated/Models/MessageDeltaContentTextObjectText.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class MessageDeltaContentTextObjectText { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal MessageDeltaContentTextObjectText() { Annotations = new ChangeTrackingList(); @@ -20,7 +19,7 @@ internal MessageDeltaContentTextObjectText(string value, IReadOnlyList.Write(Utf8JsonWriter writer, ModelReade } writer.WriteStartObject(); - writer.WritePropertyName("role"u8); - writer.WriteStringValue(Role.ToSerialString()); - if (Optional.IsCollectionDefined(Content)) + if (SerializedAdditionalRawData?.ContainsKey("role") != true) + { + writer.WritePropertyName("role"u8); + writer.WriteStringValue(Role.ToSerialString()); + } + if (SerializedAdditionalRawData?.ContainsKey("content") != true && Optional.IsCollectionDefined(Content)) { writer.WritePropertyName("content"u8); writer.WriteStartArray(); @@ -33,10 +36,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade } writer.WriteEndArray(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -100,8 +107,9 @@ internal static MessageDeltaObjectDelta DeserializeMessageDeltaObjectDelta(JsonE content = array; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageDeltaObjectDelta.cs b/src/Generated/Models/MessageDeltaObjectDelta.cs index 5b405f6a6..1d16ee8bc 100644 --- a/src/Generated/Models/MessageDeltaObjectDelta.cs +++ b/src/Generated/Models/MessageDeltaObjectDelta.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal partial class MessageDeltaObjectDelta { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal MessageDeltaObjectDelta() { Content = new ChangeTrackingList(); @@ -20,7 +19,7 @@ internal MessageDeltaObjectDelta(MessageRole role, IReadOnlyList Content { get; } } diff --git a/src/Generated/Models/MessageDeltaTextContentAnnotation.Serialization.cs b/src/Generated/Models/MessageDeltaTextContentAnnotation.Serialization.cs index 0a2e5d002..fc8043bdb 100644 --- a/src/Generated/Models/MessageDeltaTextContentAnnotation.Serialization.cs +++ b/src/Generated/Models/MessageDeltaTextContentAnnotation.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); diff --git a/src/Generated/Models/MessageDeltaTextContentAnnotation.cs b/src/Generated/Models/MessageDeltaTextContentAnnotation.cs index 1fdc201e7..a9866693c 100644 --- a/src/Generated/Models/MessageDeltaTextContentAnnotation.cs +++ b/src/Generated/Models/MessageDeltaTextContentAnnotation.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { internal abstract partial class MessageDeltaTextContentAnnotation { - private protected IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } protected MessageDeltaTextContentAnnotation() { } @@ -18,9 +17,9 @@ protected MessageDeltaTextContentAnnotation() internal MessageDeltaTextContentAnnotation(string type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - internal string Type { get; init; } + internal string Type { get; set; } } } diff --git a/src/Generated/Models/MessageFailureDetails.Serialization.cs b/src/Generated/Models/MessageFailureDetails.Serialization.cs index a0bf026d8..d2de41ece 100644 --- a/src/Generated/Models/MessageFailureDetails.Serialization.cs +++ b/src/Generated/Models/MessageFailureDetails.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW } writer.WriteStartObject(); - writer.WritePropertyName("reason"u8); - writer.WriteStringValue(Reason.ToString()); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("reason") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("reason"u8); + writer.WriteStringValue(Reason.ToString()); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static MessageFailureDetails DeserializeMessageFailureDetails(JsonEleme reason = new MessageFailureReason(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageFailureDetails.cs b/src/Generated/Models/MessageFailureDetails.cs index 2e43ade63..9c6b6e8e6 100644 --- a/src/Generated/Models/MessageFailureDetails.cs +++ b/src/Generated/Models/MessageFailureDetails.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class MessageFailureDetails { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal MessageFailureDetails(MessageFailureReason reason) { Reason = reason; @@ -19,7 +18,7 @@ internal MessageFailureDetails(MessageFailureReason reason) internal MessageFailureDetails(MessageFailureReason reason, IDictionary serializedAdditionalRawData) { Reason = reason; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal MessageFailureDetails() diff --git a/src/Generated/Models/MessageModificationOptions.Serialization.cs b/src/Generated/Models/MessageModificationOptions.Serialization.cs index 58dbd6eff..c81a7a933 100644 --- a/src/Generated/Models/MessageModificationOptions.Serialization.cs +++ b/src/Generated/Models/MessageModificationOptions.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true && Optional.IsCollectionDefined(Metadata)) { if (Metadata != null) { @@ -39,10 +39,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteNull("metadata"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -96,8 +100,9 @@ internal static MessageModificationOptions DeserializeMessageModificationOptions metadata = dictionary; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/MessageModificationOptions.cs b/src/Generated/Models/MessageModificationOptions.cs index 108c0f1ad..5c53d2234 100644 --- a/src/Generated/Models/MessageModificationOptions.cs +++ b/src/Generated/Models/MessageModificationOptions.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class MessageModificationOptions { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public MessageModificationOptions() { Metadata = new ChangeTrackingDictionary(); @@ -19,9 +18,9 @@ public MessageModificationOptions() internal MessageModificationOptions(IDictionary metadata, IDictionary serializedAdditionalRawData) { Metadata = metadata; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public IDictionary Metadata { get; } + public IDictionary Metadata { get; set; } } } diff --git a/src/Generated/Models/ModerationCategories.Serialization.cs b/src/Generated/Models/ModerationCategories.Serialization.cs index 4f0ec9181..40fa975a9 100644 --- a/src/Generated/Models/ModerationCategories.Serialization.cs +++ b/src/Generated/Models/ModerationCategories.Serialization.cs @@ -21,32 +21,69 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWr } writer.WriteStartObject(); - writer.WritePropertyName("hate"u8); - writer.WriteBooleanValue(Hate); - writer.WritePropertyName("hate/threatening"u8); - writer.WriteBooleanValue(HateThreatening); - writer.WritePropertyName("harassment"u8); - writer.WriteBooleanValue(Harassment); - writer.WritePropertyName("harassment/threatening"u8); - writer.WriteBooleanValue(HarassmentThreatening); - writer.WritePropertyName("self-harm"u8); - writer.WriteBooleanValue(SelfHarm); - writer.WritePropertyName("self-harm/intent"u8); - writer.WriteBooleanValue(SelfHarmIntent); - writer.WritePropertyName("self-harm/instructions"u8); - writer.WriteBooleanValue(SelfHarmInstructions); - writer.WritePropertyName("sexual"u8); - writer.WriteBooleanValue(Sexual); - writer.WritePropertyName("sexual/minors"u8); - writer.WriteBooleanValue(SexualMinors); - writer.WritePropertyName("violence"u8); - writer.WriteBooleanValue(Violence); - writer.WritePropertyName("violence/graphic"u8); - writer.WriteBooleanValue(ViolenceGraphic); - if (true && _serializedAdditionalRawData != null) - { - foreach (var item in _serializedAdditionalRawData) + if (SerializedAdditionalRawData?.ContainsKey("hate") != true) + { + writer.WritePropertyName("hate"u8); + writer.WriteBooleanValue(Hate); + } + if (SerializedAdditionalRawData?.ContainsKey("hate/threatening") != true) + { + writer.WritePropertyName("hate/threatening"u8); + writer.WriteBooleanValue(HateThreatening); + } + if (SerializedAdditionalRawData?.ContainsKey("harassment") != true) + { + writer.WritePropertyName("harassment"u8); + writer.WriteBooleanValue(Harassment); + } + if (SerializedAdditionalRawData?.ContainsKey("harassment/threatening") != true) + { + writer.WritePropertyName("harassment/threatening"u8); + writer.WriteBooleanValue(HarassmentThreatening); + } + if (SerializedAdditionalRawData?.ContainsKey("self-harm") != true) + { + writer.WritePropertyName("self-harm"u8); + writer.WriteBooleanValue(SelfHarm); + } + if (SerializedAdditionalRawData?.ContainsKey("self-harm/intent") != true) + { + writer.WritePropertyName("self-harm/intent"u8); + writer.WriteBooleanValue(SelfHarmIntent); + } + if (SerializedAdditionalRawData?.ContainsKey("self-harm/instructions") != true) + { + writer.WritePropertyName("self-harm/instructions"u8); + writer.WriteBooleanValue(SelfHarmInstructions); + } + if (SerializedAdditionalRawData?.ContainsKey("sexual") != true) + { + writer.WritePropertyName("sexual"u8); + writer.WriteBooleanValue(Sexual); + } + if (SerializedAdditionalRawData?.ContainsKey("sexual/minors") != true) + { + writer.WritePropertyName("sexual/minors"u8); + writer.WriteBooleanValue(SexualMinors); + } + if (SerializedAdditionalRawData?.ContainsKey("violence") != true) + { + writer.WritePropertyName("violence"u8); + writer.WriteBooleanValue(Violence); + } + if (SerializedAdditionalRawData?.ContainsKey("violence/graphic") != true) + { + writer.WritePropertyName("violence/graphic"u8); + writer.WriteBooleanValue(ViolenceGraphic); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -151,8 +188,9 @@ internal static ModerationCategories DeserializeModerationCategories(JsonElement violenceGraphic = property.Value.GetBoolean(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ModerationCategories.cs b/src/Generated/Models/ModerationCategories.cs index 7ae083e9a..978eaf4e7 100644 --- a/src/Generated/Models/ModerationCategories.cs +++ b/src/Generated/Models/ModerationCategories.cs @@ -9,8 +9,7 @@ namespace OpenAI.Moderations { public partial class ModerationCategories { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal ModerationCategories(bool hate, bool hateThreatening, bool harassment, bool harassmentThreatening, bool selfHarm, bool selfHarmIntent, bool selfHarmInstructions, bool sexual, bool sexualMinors, bool violence, bool violenceGraphic) { Hate = hate; @@ -39,7 +38,7 @@ internal ModerationCategories(bool hate, bool hateThreatening, bool harassment, SexualMinors = sexualMinors; Violence = violence; ViolenceGraphic = violenceGraphic; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal ModerationCategories() diff --git a/src/Generated/Models/ModerationCategoryScores.Serialization.cs b/src/Generated/Models/ModerationCategoryScores.Serialization.cs index cd47e74ad..64cc010a6 100644 --- a/src/Generated/Models/ModerationCategoryScores.Serialization.cs +++ b/src/Generated/Models/ModerationCategoryScores.Serialization.cs @@ -21,32 +21,69 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead } writer.WriteStartObject(); - writer.WritePropertyName("hate"u8); - writer.WriteNumberValue(Hate); - writer.WritePropertyName("hate/threatening"u8); - writer.WriteNumberValue(HateThreatening); - writer.WritePropertyName("harassment"u8); - writer.WriteNumberValue(Harassment); - writer.WritePropertyName("harassment/threatening"u8); - writer.WriteNumberValue(HarassmentThreatening); - writer.WritePropertyName("self-harm"u8); - writer.WriteNumberValue(SelfHarm); - writer.WritePropertyName("self-harm/intent"u8); - writer.WriteNumberValue(SelfHarmIntent); - writer.WritePropertyName("self-harm/instructions"u8); - writer.WriteNumberValue(SelfHarmInstructions); - writer.WritePropertyName("sexual"u8); - writer.WriteNumberValue(Sexual); - writer.WritePropertyName("sexual/minors"u8); - writer.WriteNumberValue(SexualMinors); - writer.WritePropertyName("violence"u8); - writer.WriteNumberValue(Violence); - writer.WritePropertyName("violence/graphic"u8); - writer.WriteNumberValue(ViolenceGraphic); - if (true && _serializedAdditionalRawData != null) - { - foreach (var item in _serializedAdditionalRawData) + if (SerializedAdditionalRawData?.ContainsKey("hate") != true) + { + writer.WritePropertyName("hate"u8); + writer.WriteNumberValue(Hate); + } + if (SerializedAdditionalRawData?.ContainsKey("hate/threatening") != true) + { + writer.WritePropertyName("hate/threatening"u8); + writer.WriteNumberValue(HateThreatening); + } + if (SerializedAdditionalRawData?.ContainsKey("harassment") != true) + { + writer.WritePropertyName("harassment"u8); + writer.WriteNumberValue(Harassment); + } + if (SerializedAdditionalRawData?.ContainsKey("harassment/threatening") != true) + { + writer.WritePropertyName("harassment/threatening"u8); + writer.WriteNumberValue(HarassmentThreatening); + } + if (SerializedAdditionalRawData?.ContainsKey("self-harm") != true) + { + writer.WritePropertyName("self-harm"u8); + writer.WriteNumberValue(SelfHarm); + } + if (SerializedAdditionalRawData?.ContainsKey("self-harm/intent") != true) + { + writer.WritePropertyName("self-harm/intent"u8); + writer.WriteNumberValue(SelfHarmIntent); + } + if (SerializedAdditionalRawData?.ContainsKey("self-harm/instructions") != true) + { + writer.WritePropertyName("self-harm/instructions"u8); + writer.WriteNumberValue(SelfHarmInstructions); + } + if (SerializedAdditionalRawData?.ContainsKey("sexual") != true) + { + writer.WritePropertyName("sexual"u8); + writer.WriteNumberValue(Sexual); + } + if (SerializedAdditionalRawData?.ContainsKey("sexual/minors") != true) + { + writer.WritePropertyName("sexual/minors"u8); + writer.WriteNumberValue(SexualMinors); + } + if (SerializedAdditionalRawData?.ContainsKey("violence") != true) + { + writer.WritePropertyName("violence"u8); + writer.WriteNumberValue(Violence); + } + if (SerializedAdditionalRawData?.ContainsKey("violence/graphic") != true) + { + writer.WritePropertyName("violence/graphic"u8); + writer.WriteNumberValue(ViolenceGraphic); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -151,8 +188,9 @@ internal static ModerationCategoryScores DeserializeModerationCategoryScores(Jso violenceGraphic = property.Value.GetSingle(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ModerationCategoryScores.cs b/src/Generated/Models/ModerationCategoryScores.cs index 77724e7af..a734260ce 100644 --- a/src/Generated/Models/ModerationCategoryScores.cs +++ b/src/Generated/Models/ModerationCategoryScores.cs @@ -9,8 +9,7 @@ namespace OpenAI.Moderations { public partial class ModerationCategoryScores { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal ModerationCategoryScores(float hate, float hateThreatening, float harassment, float harassmentThreatening, float selfHarm, float selfHarmIntent, float selfHarmInstructions, float sexual, float sexualMinors, float violence, float violenceGraphic) { Hate = hate; @@ -39,7 +38,7 @@ internal ModerationCategoryScores(float hate, float hateThreatening, float haras SexualMinors = sexualMinors; Violence = violence; ViolenceGraphic = violenceGraphic; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal ModerationCategoryScores() diff --git a/src/Generated/Models/ModerationOptions.Serialization.cs b/src/Generated/Models/ModerationOptions.Serialization.cs index d1bf1301b..bf8dd6aa3 100644 --- a/src/Generated/Models/ModerationOptions.Serialization.cs +++ b/src/Generated/Models/ModerationOptions.Serialization.cs @@ -21,24 +21,31 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrite } writer.WriteStartObject(); - writer.WritePropertyName("input"u8); + if (SerializedAdditionalRawData?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); #if NET6_0_OR_GREATER writer.WriteRawValue(Input); #else - using (JsonDocument document = JsonDocument.Parse(Input)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } + using (JsonDocument document = JsonDocument.Parse(Input)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } #endif - if (Optional.IsDefined(Model)) + } + if (SerializedAdditionalRawData?.ContainsKey("model") != true && Optional.IsDefined(Model)) { writer.WritePropertyName("model"u8); writer.WriteStringValue(Model.Value.ToString()); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -93,8 +100,9 @@ internal static ModerationOptions DeserializeModerationOptions(JsonElement eleme model = new InternalCreateModerationRequestModel(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ModerationOptions.cs b/src/Generated/Models/ModerationOptions.cs index fc2b620ce..e21defe31 100644 --- a/src/Generated/Models/ModerationOptions.cs +++ b/src/Generated/Models/ModerationOptions.cs @@ -9,13 +9,13 @@ namespace OpenAI.Moderations { internal partial class ModerationOptions { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal ModerationOptions(BinaryData input, InternalCreateModerationRequestModel? model, IDictionary serializedAdditionalRawData) { Input = input; Model = model; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } } } diff --git a/src/Generated/Models/ModerationResult.Serialization.cs b/src/Generated/Models/ModerationResult.Serialization.cs index 2e908e806..e3bdfb8ec 100644 --- a/src/Generated/Models/ModerationResult.Serialization.cs +++ b/src/Generated/Models/ModerationResult.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter } writer.WriteStartObject(); - writer.WritePropertyName("flagged"u8); - writer.WriteBooleanValue(Flagged); - writer.WritePropertyName("categories"u8); - writer.WriteObjectValue(Categories, options); - writer.WritePropertyName("category_scores"u8); - writer.WriteObjectValue(CategoryScores, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("flagged") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("flagged"u8); + writer.WriteBooleanValue(Flagged); + } + if (SerializedAdditionalRawData?.ContainsKey("categories") != true) + { + writer.WritePropertyName("categories"u8); + writer.WriteObjectValue(Categories, options); + } + if (SerializedAdditionalRawData?.ContainsKey("category_scores") != true) + { + writer.WritePropertyName("category_scores"u8); + writer.WriteObjectValue(CategoryScores, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static ModerationResult DeserializeModerationResult(JsonElement element categoryScores = ModerationCategoryScores.DeserializeModerationCategoryScores(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ModerationResult.cs b/src/Generated/Models/ModerationResult.cs index 9783589c9..ae015e2eb 100644 --- a/src/Generated/Models/ModerationResult.cs +++ b/src/Generated/Models/ModerationResult.cs @@ -9,8 +9,7 @@ namespace OpenAI.Moderations { public partial class ModerationResult { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal ModerationResult(bool flagged, ModerationCategories categories, ModerationCategoryScores categoryScores) { Argument.AssertNotNull(categories, nameof(categories)); @@ -26,7 +25,7 @@ internal ModerationResult(bool flagged, ModerationCategories categories, Moderat Flagged = flagged; Categories = categories; CategoryScores = categoryScores; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal ModerationResult() diff --git a/src/Generated/Models/OpenAIError.Serialization.cs b/src/Generated/Models/OpenAIError.Serialization.cs index 883819949..48b1c7159 100644 --- a/src/Generated/Models/OpenAIError.Serialization.cs +++ b/src/Generated/Models/OpenAIError.Serialization.cs @@ -21,32 +21,48 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptio } writer.WriteStartObject(); - if (Code != null) + if (SerializedAdditionalRawData?.ContainsKey("code") != true) { - writer.WritePropertyName("code"u8); - writer.WriteStringValue(Code); + if (Code != null) + { + writer.WritePropertyName("code"u8); + writer.WriteStringValue(Code); + } + else + { + writer.WriteNull("code"); + } } - else + if (SerializedAdditionalRawData?.ContainsKey("message") != true) { - writer.WriteNull("code"); + writer.WritePropertyName("message"u8); + writer.WriteStringValue(Message); } - writer.WritePropertyName("message"u8); - writer.WriteStringValue(Message); - if (Param != null) + if (SerializedAdditionalRawData?.ContainsKey("param") != true) { - writer.WritePropertyName("param"u8); - writer.WriteStringValue(Param); + if (Param != null) + { + writer.WritePropertyName("param"u8); + writer.WriteStringValue(Param); + } + else + { + writer.WriteNull("param"); + } } - else + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - writer.WriteNull("param"); + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); } - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -119,8 +135,9 @@ internal static OpenAIError DeserializeOpenAIError(JsonElement element, ModelRea type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/OpenAIError.cs b/src/Generated/Models/OpenAIError.cs index dc5c977b0..7b94f06f3 100644 --- a/src/Generated/Models/OpenAIError.cs +++ b/src/Generated/Models/OpenAIError.cs @@ -9,8 +9,7 @@ namespace OpenAI.Internal { internal partial class OpenAIError { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal OpenAIError(string code, string message, string param, string type) { Argument.AssertNotNull(message, nameof(message)); @@ -28,7 +27,7 @@ internal OpenAIError(string code, string message, string param, string type, IDi Message = message; Param = param; Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal OpenAIError() diff --git a/src/Generated/Models/OpenAIErrorResponse.Serialization.cs b/src/Generated/Models/OpenAIErrorResponse.Serialization.cs index f38ff4447..30adf205a 100644 --- a/src/Generated/Models/OpenAIErrorResponse.Serialization.cs +++ b/src/Generated/Models/OpenAIErrorResponse.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWri } writer.WriteStartObject(); - writer.WritePropertyName("error"u8); - writer.WriteObjectValue(Error, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("error") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("error"u8); + writer.WriteObjectValue(Error, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static OpenAIErrorResponse DeserializeOpenAIErrorResponse(JsonElement e error = OpenAIError.DeserializeOpenAIError(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/OpenAIErrorResponse.cs b/src/Generated/Models/OpenAIErrorResponse.cs index d8a1d926a..764dd3854 100644 --- a/src/Generated/Models/OpenAIErrorResponse.cs +++ b/src/Generated/Models/OpenAIErrorResponse.cs @@ -9,8 +9,7 @@ namespace OpenAI.Internal { internal partial class OpenAIErrorResponse { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal OpenAIErrorResponse(OpenAIError error) { Argument.AssertNotNull(error, nameof(error)); @@ -21,7 +20,7 @@ internal OpenAIErrorResponse(OpenAIError error) internal OpenAIErrorResponse(OpenAIError error, IDictionary serializedAdditionalRawData) { Error = error; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal OpenAIErrorResponse() diff --git a/src/Generated/Models/OpenAIFileInfo.Serialization.cs b/src/Generated/Models/OpenAIFileInfo.Serialization.cs index 94834efae..758abba06 100644 --- a/src/Generated/Models/OpenAIFileInfo.Serialization.cs +++ b/src/Generated/Models/OpenAIFileInfo.Serialization.cs @@ -21,36 +21,61 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOp } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - if (SizeInBytes != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - writer.WritePropertyName("bytes"u8); - writer.WriteNumberValue(SizeInBytes.Value); + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); } - else + if (SerializedAdditionalRawData?.ContainsKey("bytes") != true) { - writer.WriteNull("bytes"); + if (SizeInBytes != null) + { + writer.WritePropertyName("bytes"u8); + writer.WriteNumberValue(SizeInBytes.Value); + } + else + { + writer.WriteNull("bytes"); + } } - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - writer.WritePropertyName("filename"u8); - writer.WriteStringValue(Filename); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("purpose"u8); - writer.WriteStringValue(Purpose.ToString()); - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.ToString()); - if (Optional.IsDefined(StatusDetails)) + if (SerializedAdditionalRawData?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (SerializedAdditionalRawData?.ContainsKey("filename") != true) + { + writer.WritePropertyName("filename"u8); + writer.WriteStringValue(Filename); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("purpose") != true) + { + writer.WritePropertyName("purpose"u8); + writer.WriteStringValue(Purpose.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("status_details") != true && Optional.IsDefined(StatusDetails)) { writer.WritePropertyName("status_details"u8); writer.WriteStringValue(StatusDetails); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -142,8 +167,9 @@ internal static OpenAIFileInfo DeserializeOpenAIFileInfo(JsonElement element, Mo statusDetails = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/OpenAIFileInfo.cs b/src/Generated/Models/OpenAIFileInfo.cs index 6be3cfb8a..240c8589d 100644 --- a/src/Generated/Models/OpenAIFileInfo.cs +++ b/src/Generated/Models/OpenAIFileInfo.cs @@ -9,8 +9,7 @@ namespace OpenAI.Files { public partial class OpenAIFileInfo { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal OpenAIFileInfo(string id, long? sizeInBytes, DateTimeOffset createdAt, string filename, OpenAIFilePurpose purpose, OpenAIFileStatus status) { Argument.AssertNotNull(id, nameof(id)); @@ -34,7 +33,7 @@ internal OpenAIFileInfo(string id, long? sizeInBytes, DateTimeOffset createdAt, Purpose = purpose; Status = status; StatusDetails = statusDetails; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal OpenAIFileInfo() diff --git a/src/Generated/Models/OpenAIModelInfo.Serialization.cs b/src/Generated/Models/OpenAIModelInfo.Serialization.cs index 08d3b7277..cd2770c5a 100644 --- a/src/Generated/Models/OpenAIModelInfo.Serialization.cs +++ b/src/Generated/Models/OpenAIModelInfo.Serialization.cs @@ -21,18 +21,34 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterO } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("created"u8); - writer.WriteNumberValue(CreatedAt, "U"); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("owned_by"u8); - writer.WriteStringValue(OwnedBy); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("created") != true) + { + writer.WritePropertyName("created"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("owned_by") != true) + { + writer.WritePropertyName("owned_by"u8); + writer.WriteStringValue(OwnedBy); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -95,8 +111,9 @@ internal static OpenAIModelInfo DeserializeOpenAIModelInfo(JsonElement element, ownedBy = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/OpenAIModelInfo.cs b/src/Generated/Models/OpenAIModelInfo.cs index ad56a1f33..c838e75ab 100644 --- a/src/Generated/Models/OpenAIModelInfo.cs +++ b/src/Generated/Models/OpenAIModelInfo.cs @@ -9,8 +9,7 @@ namespace OpenAI.Models { public partial class OpenAIModelInfo { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal OpenAIModelInfo(string id, DateTimeOffset createdAt, string ownedBy) { Argument.AssertNotNull(id, nameof(id)); @@ -27,7 +26,7 @@ internal OpenAIModelInfo(string id, DateTimeOffset createdAt, InternalModelObjec CreatedAt = createdAt; Object = @object; OwnedBy = ownedBy; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal OpenAIModelInfo() diff --git a/src/Generated/Models/RunCreationOptions.Serialization.cs b/src/Generated/Models/RunCreationOptions.Serialization.cs index 0443f8024..24edf0d5c 100644 --- a/src/Generated/Models/RunCreationOptions.Serialization.cs +++ b/src/Generated/Models/RunCreationOptions.Serialization.cs @@ -21,9 +21,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteStartObject(); - writer.WritePropertyName("assistant_id"u8); - writer.WriteStringValue(AssistantId); - if (Optional.IsDefined(ModelOverride)) + if (SerializedAdditionalRawData?.ContainsKey("assistant_id") != true) + { + writer.WritePropertyName("assistant_id"u8); + writer.WriteStringValue(AssistantId); + } + if (SerializedAdditionalRawData?.ContainsKey("model") != true && Optional.IsDefined(ModelOverride)) { if (ModelOverride != null) { @@ -35,7 +38,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("model"); } } - if (Optional.IsDefined(InstructionsOverride)) + if (SerializedAdditionalRawData?.ContainsKey("instructions") != true && Optional.IsDefined(InstructionsOverride)) { if (InstructionsOverride != null) { @@ -47,7 +50,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("instructions"); } } - if (Optional.IsDefined(AdditionalInstructions)) + if (SerializedAdditionalRawData?.ContainsKey("additional_instructions") != true && Optional.IsDefined(AdditionalInstructions)) { if (AdditionalInstructions != null) { @@ -59,7 +62,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("additional_instructions"); } } - if (Optional.IsCollectionDefined(InternalMessages)) + if (SerializedAdditionalRawData?.ContainsKey("additional_messages") != true && Optional.IsCollectionDefined(InternalMessages)) { if (InternalMessages != null) { @@ -76,7 +79,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("additional_messages"); } } - if (Optional.IsCollectionDefined(ToolsOverride)) + if (SerializedAdditionalRawData?.ContainsKey("tools") != true && Optional.IsCollectionDefined(ToolsOverride)) { if (ToolsOverride != null) { @@ -93,7 +96,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("tools"); } } - if (Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true && Optional.IsCollectionDefined(Metadata)) { if (Metadata != null) { @@ -111,7 +114,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("metadata"); } } - if (Optional.IsDefined(Temperature)) + if (SerializedAdditionalRawData?.ContainsKey("temperature") != true && Optional.IsDefined(Temperature)) { if (Temperature != null) { @@ -123,7 +126,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("temperature"); } } - if (Optional.IsDefined(NucleusSamplingFactor)) + if (SerializedAdditionalRawData?.ContainsKey("top_p") != true && Optional.IsDefined(NucleusSamplingFactor)) { if (NucleusSamplingFactor != null) { @@ -135,7 +138,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("top_p"); } } - if (Optional.IsDefined(Stream)) + if (SerializedAdditionalRawData?.ContainsKey("stream") != true && Optional.IsDefined(Stream)) { if (Stream != null) { @@ -147,7 +150,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("stream"); } } - if (Optional.IsDefined(MaxPromptTokens)) + if (SerializedAdditionalRawData?.ContainsKey("max_prompt_tokens") != true && Optional.IsDefined(MaxPromptTokens)) { if (MaxPromptTokens != null) { @@ -159,7 +162,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("max_prompt_tokens"); } } - if (Optional.IsDefined(MaxCompletionTokens)) + if (SerializedAdditionalRawData?.ContainsKey("max_completion_tokens") != true && Optional.IsDefined(MaxCompletionTokens)) { if (MaxCompletionTokens != null) { @@ -171,7 +174,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("max_completion_tokens"); } } - if (Optional.IsDefined(TruncationStrategy)) + if (SerializedAdditionalRawData?.ContainsKey("truncation_strategy") != true && Optional.IsDefined(TruncationStrategy)) { if (TruncationStrategy != null) { @@ -183,7 +186,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("truncation_strategy"); } } - if (Optional.IsDefined(ToolConstraint)) + if (SerializedAdditionalRawData?.ContainsKey("tool_choice") != true && Optional.IsDefined(ToolConstraint)) { if (ToolConstraint != null) { @@ -195,12 +198,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("tool_choice"); } } - if (Optional.IsDefined(ParallelToolCallsEnabled)) + if (SerializedAdditionalRawData?.ContainsKey("parallel_tool_calls") != true && Optional.IsDefined(ParallelToolCallsEnabled)) { writer.WritePropertyName("parallel_tool_calls"u8); writer.WriteBooleanValue(ParallelToolCallsEnabled.Value); } - if (Optional.IsDefined(ResponseFormat)) + if (SerializedAdditionalRawData?.ContainsKey("response_format") != true && Optional.IsDefined(ResponseFormat)) { if (ResponseFormat != null) { @@ -212,10 +215,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("response_format"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -436,8 +443,9 @@ internal static RunCreationOptions DeserializeRunCreationOptions(JsonElement ele responseFormat = AssistantResponseFormat.DeserializeAssistantResponseFormat(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/RunCreationOptions.cs b/src/Generated/Models/RunCreationOptions.cs index 86a41fa80..9e0d88fa7 100644 --- a/src/Generated/Models/RunCreationOptions.cs +++ b/src/Generated/Models/RunCreationOptions.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants { public partial class RunCreationOptions { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal RunCreationOptions(string assistantId, string modelOverride, string instructionsOverride, string additionalInstructions, IList internalMessages, IList toolsOverride, IDictionary metadata, float? temperature, float? nucleusSamplingFactor, bool? stream, int? maxPromptTokens, int? maxCompletionTokens, RunTruncationStrategy truncationStrategy, ToolConstraint toolConstraint, bool? parallelToolCallsEnabled, AssistantResponseFormat responseFormat, IDictionary serializedAdditionalRawData) { @@ -29,7 +29,7 @@ internal RunCreationOptions(string assistantId, string modelOverride, string ins ToolConstraint = toolConstraint; ParallelToolCallsEnabled = parallelToolCallsEnabled; ResponseFormat = responseFormat; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } } } diff --git a/src/Generated/Models/RunError.Serialization.cs b/src/Generated/Models/RunError.Serialization.cs index db330f7bb..d18a32fca 100644 --- a/src/Generated/Models/RunError.Serialization.cs +++ b/src/Generated/Models/RunError.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions } writer.WriteStartObject(); - writer.WritePropertyName("code"u8); - writer.WriteStringValue(Code.ToString()); - writer.WritePropertyName("message"u8); - writer.WriteStringValue(Message); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("code") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("code"u8); + writer.WriteStringValue(Code.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("message") != true) + { + writer.WritePropertyName("message"u8); + writer.WriteStringValue(Message); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static RunError DeserializeRunError(JsonElement element, ModelReaderWri message = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/RunError.cs b/src/Generated/Models/RunError.cs index 5922e20a7..8404fbbe2 100644 --- a/src/Generated/Models/RunError.cs +++ b/src/Generated/Models/RunError.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class RunError { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal RunError(RunErrorCode code, string message) { Argument.AssertNotNull(message, nameof(message)); @@ -23,7 +22,7 @@ internal RunError(RunErrorCode code, string message, IDictionary.Write(Utf8JsonWriter writer, ModelReaderWr } writer.WriteStartObject(); - if (Optional.IsDefined(Reason)) + if (SerializedAdditionalRawData?.ContainsKey("reason") != true && Optional.IsDefined(Reason)) { writer.WritePropertyName("reason"u8); writer.WriteStringValue(Reason.Value.ToString()); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -78,8 +82,9 @@ internal static RunIncompleteDetails DeserializeRunIncompleteDetails(JsonElement reason = new RunIncompleteReason(property.Value.GetString()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/RunIncompleteDetails.cs b/src/Generated/Models/RunIncompleteDetails.cs index 5484924fd..5c063d7c0 100644 --- a/src/Generated/Models/RunIncompleteDetails.cs +++ b/src/Generated/Models/RunIncompleteDetails.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class RunIncompleteDetails { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal RunIncompleteDetails() { } @@ -18,7 +17,7 @@ internal RunIncompleteDetails() internal RunIncompleteDetails(RunIncompleteReason? reason, IDictionary serializedAdditionalRawData) { Reason = reason; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public RunIncompleteReason? Reason { get; } diff --git a/src/Generated/Models/RunModificationOptions.Serialization.cs b/src/Generated/Models/RunModificationOptions.Serialization.cs index a4a4937bd..f5c48a3a2 100644 --- a/src/Generated/Models/RunModificationOptions.Serialization.cs +++ b/src/Generated/Models/RunModificationOptions.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true && Optional.IsCollectionDefined(Metadata)) { if (Metadata != null) { @@ -39,10 +39,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteNull("metadata"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -96,8 +100,9 @@ internal static RunModificationOptions DeserializeRunModificationOptions(JsonEle metadata = dictionary; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/RunModificationOptions.cs b/src/Generated/Models/RunModificationOptions.cs index 0b75a8ccb..b9c29be48 100644 --- a/src/Generated/Models/RunModificationOptions.cs +++ b/src/Generated/Models/RunModificationOptions.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class RunModificationOptions { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public RunModificationOptions() { Metadata = new ChangeTrackingDictionary(); @@ -19,9 +18,9 @@ public RunModificationOptions() internal RunModificationOptions(IDictionary metadata, IDictionary serializedAdditionalRawData) { Metadata = metadata; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public IDictionary Metadata { get; } + public IDictionary Metadata { get; set; } } } diff --git a/src/Generated/Models/RunStep.Serialization.cs b/src/Generated/Models/RunStep.Serialization.cs index 9aff37f59..ca563793b 100644 --- a/src/Generated/Models/RunStep.Serialization.cs +++ b/src/Generated/Models/RunStep.Serialization.cs @@ -21,97 +21,149 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions o } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - writer.WritePropertyName("assistant_id"u8); - writer.WriteStringValue(AssistantId); - writer.WritePropertyName("thread_id"u8); - writer.WriteStringValue(ThreadId); - writer.WritePropertyName("run_id"u8); - writer.WriteStringValue(RunId); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.ToString()); - writer.WritePropertyName("step_details"u8); - writer.WriteObjectValue(Details, options); - if (LastError != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - writer.WritePropertyName("last_error"u8); - writer.WriteObjectValue(LastError, options); + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); } - else + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - writer.WriteNull("last_error"); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - if (ExpiredAt != null) + if (SerializedAdditionalRawData?.ContainsKey("created_at") != true) { - writer.WritePropertyName("expired_at"u8); - writer.WriteNumberValue(ExpiredAt.Value, "U"); + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); } - else + if (SerializedAdditionalRawData?.ContainsKey("assistant_id") != true) { - writer.WriteNull("expired_at"); + writer.WritePropertyName("assistant_id"u8); + writer.WriteStringValue(AssistantId); } - if (CancelledAt != null) + if (SerializedAdditionalRawData?.ContainsKey("thread_id") != true) { - writer.WritePropertyName("cancelled_at"u8); - writer.WriteNumberValue(CancelledAt.Value, "U"); + writer.WritePropertyName("thread_id"u8); + writer.WriteStringValue(ThreadId); } - else + if (SerializedAdditionalRawData?.ContainsKey("run_id") != true) { - writer.WriteNull("cancelled_at"); + writer.WritePropertyName("run_id"u8); + writer.WriteStringValue(RunId); } - if (FailedAt != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - writer.WritePropertyName("failed_at"u8); - writer.WriteNumberValue(FailedAt.Value, "U"); + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type.ToString()); } - else + if (SerializedAdditionalRawData?.ContainsKey("status") != true) { - writer.WriteNull("failed_at"); + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToString()); } - if (CompletedAt != null) + if (SerializedAdditionalRawData?.ContainsKey("step_details") != true) { - writer.WritePropertyName("completed_at"u8); - writer.WriteNumberValue(CompletedAt.Value, "U"); + writer.WritePropertyName("step_details"u8); + writer.WriteObjectValue(Details, options); } - else + if (SerializedAdditionalRawData?.ContainsKey("last_error") != true) { - writer.WriteNull("completed_at"); + if (LastError != null) + { + writer.WritePropertyName("last_error"u8); + writer.WriteObjectValue(LastError, options); + } + else + { + writer.WriteNull("last_error"); + } } - if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("expired_at") != true) { - writer.WritePropertyName("metadata"u8); - writer.WriteStartObject(); - foreach (var item in Metadata) + if (ExpiredAt != null) { - writer.WritePropertyName(item.Key); - writer.WriteStringValue(item.Value); + writer.WritePropertyName("expired_at"u8); + writer.WriteNumberValue(ExpiredAt.Value, "U"); + } + else + { + writer.WriteNull("expired_at"); + } + } + if (SerializedAdditionalRawData?.ContainsKey("cancelled_at") != true) + { + if (CancelledAt != null) + { + writer.WritePropertyName("cancelled_at"u8); + writer.WriteNumberValue(CancelledAt.Value, "U"); + } + else + { + writer.WriteNull("cancelled_at"); + } + } + if (SerializedAdditionalRawData?.ContainsKey("failed_at") != true) + { + if (FailedAt != null) + { + writer.WritePropertyName("failed_at"u8); + writer.WriteNumberValue(FailedAt.Value, "U"); + } + else + { + writer.WriteNull("failed_at"); } - writer.WriteEndObject(); } - else + if (SerializedAdditionalRawData?.ContainsKey("completed_at") != true) { - writer.WriteNull("metadata"); + if (CompletedAt != null) + { + writer.WritePropertyName("completed_at"u8); + writer.WriteNumberValue(CompletedAt.Value, "U"); + } + else + { + writer.WriteNull("completed_at"); + } } - if (Usage != null) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true) { - writer.WritePropertyName("usage"u8); - writer.WriteObjectValue(Usage, options); + if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + else + { + writer.WriteNull("metadata"); + } } - else + if (SerializedAdditionalRawData?.ContainsKey("usage") != true) { - writer.WriteNull("usage"); + if (Usage != null) + { + writer.WritePropertyName("usage"u8); + writer.WriteObjectValue(Usage, options); + } + else + { + writer.WriteNull("usage"); + } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -286,8 +338,9 @@ internal static RunStep DeserializeRunStep(JsonElement element, ModelReaderWrite usage = RunStepTokenUsage.DeserializeRunStepTokenUsage(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/RunStep.cs b/src/Generated/Models/RunStep.cs index 60f553719..e6d00c191 100644 --- a/src/Generated/Models/RunStep.cs +++ b/src/Generated/Models/RunStep.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class RunStep { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal RunStep(string id, DateTimeOffset createdAt, string assistantId, string threadId, string runId, RunStepType type, RunStepStatus status, RunStepDetails details, RunStepError lastError, DateTimeOffset? expiredAt, DateTimeOffset? cancelledAt, DateTimeOffset? failedAt, DateTimeOffset? completedAt, IReadOnlyDictionary metadata, RunStepTokenUsage usage) { Argument.AssertNotNull(id, nameof(id)); @@ -54,7 +53,7 @@ internal RunStep(string id, InternalRunStepObjectObject @object, DateTimeOffset CompletedAt = completedAt; Metadata = metadata; Usage = usage; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal RunStep() diff --git a/src/Generated/Models/RunStepCodeInterpreterOutput.Serialization.cs b/src/Generated/Models/RunStepCodeInterpreterOutput.Serialization.cs index b5ed2a2f4..f7ef07662 100644 --- a/src/Generated/Models/RunStepCodeInterpreterOutput.Serialization.cs +++ b/src/Generated/Models/RunStepCodeInterpreterOutput.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); diff --git a/src/Generated/Models/RunStepCodeInterpreterOutput.cs b/src/Generated/Models/RunStepCodeInterpreterOutput.cs index 531807091..1419ce55c 100644 --- a/src/Generated/Models/RunStepCodeInterpreterOutput.cs +++ b/src/Generated/Models/RunStepCodeInterpreterOutput.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public abstract partial class RunStepCodeInterpreterOutput { - private protected IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } protected RunStepCodeInterpreterOutput() { } @@ -18,9 +17,9 @@ protected RunStepCodeInterpreterOutput() internal RunStepCodeInterpreterOutput(string type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - internal string Type { get; init; } + internal string Type { get; set; } } } diff --git a/src/Generated/Models/RunStepDetails.Serialization.cs b/src/Generated/Models/RunStepDetails.Serialization.cs index 282ec21ff..35e15ea14 100644 --- a/src/Generated/Models/RunStepDetails.Serialization.cs +++ b/src/Generated/Models/RunStepDetails.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOp } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); diff --git a/src/Generated/Models/RunStepDetails.cs b/src/Generated/Models/RunStepDetails.cs index 204463dde..29a98a672 100644 --- a/src/Generated/Models/RunStepDetails.cs +++ b/src/Generated/Models/RunStepDetails.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public abstract partial class RunStepDetails { - private protected IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } protected RunStepDetails() { } @@ -18,9 +17,9 @@ protected RunStepDetails() internal RunStepDetails(string type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - internal string Type { get; init; } + internal string Type { get; set; } } } diff --git a/src/Generated/Models/RunStepError.Serialization.cs b/src/Generated/Models/RunStepError.Serialization.cs index 0716569ff..e81e1ee96 100644 --- a/src/Generated/Models/RunStepError.Serialization.cs +++ b/src/Generated/Models/RunStepError.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpti } writer.WriteStartObject(); - writer.WritePropertyName("code"u8); - writer.WriteStringValue(Code.ToString()); - writer.WritePropertyName("message"u8); - writer.WriteStringValue(Message); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("code") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("code"u8); + writer.WriteStringValue(Code.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("message") != true) + { + writer.WritePropertyName("message"u8); + writer.WriteStringValue(Message); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static RunStepError DeserializeRunStepError(JsonElement element, ModelR message = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/RunStepError.cs b/src/Generated/Models/RunStepError.cs index 977d87a38..780003cbb 100644 --- a/src/Generated/Models/RunStepError.cs +++ b/src/Generated/Models/RunStepError.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class RunStepError { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal RunStepError(RunStepErrorCode code, string message) { Argument.AssertNotNull(message, nameof(message)); @@ -23,7 +22,7 @@ internal RunStepError(RunStepErrorCode code, string message, IDictionary.Write(Utf8JsonWriter writer, ModelReaderWrite } writer.WriteStartObject(); - writer.WritePropertyName("completion_tokens"u8); - writer.WriteNumberValue(CompletionTokens); - writer.WritePropertyName("prompt_tokens"u8); - writer.WriteNumberValue(PromptTokens); - writer.WritePropertyName("total_tokens"u8); - writer.WriteNumberValue(TotalTokens); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("completion_tokens") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("completion_tokens"u8); + writer.WriteNumberValue(CompletionTokens); + } + if (SerializedAdditionalRawData?.ContainsKey("prompt_tokens") != true) + { + writer.WritePropertyName("prompt_tokens"u8); + writer.WriteNumberValue(PromptTokens); + } + if (SerializedAdditionalRawData?.ContainsKey("total_tokens") != true) + { + writer.WritePropertyName("total_tokens"u8); + writer.WriteNumberValue(TotalTokens); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static RunStepTokenUsage DeserializeRunStepTokenUsage(JsonElement eleme totalTokens = property.Value.GetInt32(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/RunStepTokenUsage.cs b/src/Generated/Models/RunStepTokenUsage.cs index 475085b3e..3e1e81939 100644 --- a/src/Generated/Models/RunStepTokenUsage.cs +++ b/src/Generated/Models/RunStepTokenUsage.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class RunStepTokenUsage { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal RunStepTokenUsage(int completionTokens, int promptTokens, int totalTokens) { CompletionTokens = completionTokens; @@ -23,7 +22,7 @@ internal RunStepTokenUsage(int completionTokens, int promptTokens, int totalToke CompletionTokens = completionTokens; PromptTokens = promptTokens; TotalTokens = totalTokens; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal RunStepTokenUsage() diff --git a/src/Generated/Models/RunStepToolCall.Serialization.cs b/src/Generated/Models/RunStepToolCall.Serialization.cs index 7862386d5..322ca021d 100644 --- a/src/Generated/Models/RunStepToolCall.Serialization.cs +++ b/src/Generated/Models/RunStepToolCall.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterO } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); diff --git a/src/Generated/Models/RunStepToolCall.cs b/src/Generated/Models/RunStepToolCall.cs index ff60e3735..7c21afff2 100644 --- a/src/Generated/Models/RunStepToolCall.cs +++ b/src/Generated/Models/RunStepToolCall.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public abstract partial class RunStepToolCall { - private protected IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } protected RunStepToolCall() { } @@ -18,9 +17,9 @@ protected RunStepToolCall() internal RunStepToolCall(string type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - internal string Type { get; init; } + internal string Type { get; set; } } } diff --git a/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.Serialization.cs b/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.Serialization.cs index c3201dbe4..15407f30d 100644 --- a/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.Serialization.cs +++ b/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); diff --git a/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.cs b/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.cs index 17e9ec48c..637332102 100644 --- a/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.cs +++ b/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public abstract partial class RunStepUpdateCodeInterpreterOutput { - private protected IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } protected RunStepUpdateCodeInterpreterOutput() { } @@ -18,9 +17,9 @@ protected RunStepUpdateCodeInterpreterOutput() internal RunStepUpdateCodeInterpreterOutput(string type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - internal string Type { get; init; } + internal string Type { get; set; } } } diff --git a/src/Generated/Models/RunTokenUsage.Serialization.cs b/src/Generated/Models/RunTokenUsage.Serialization.cs index 06d7f3c7e..306791245 100644 --- a/src/Generated/Models/RunTokenUsage.Serialization.cs +++ b/src/Generated/Models/RunTokenUsage.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpt } writer.WriteStartObject(); - writer.WritePropertyName("completion_tokens"u8); - writer.WriteNumberValue(CompletionTokens); - writer.WritePropertyName("prompt_tokens"u8); - writer.WriteNumberValue(PromptTokens); - writer.WritePropertyName("total_tokens"u8); - writer.WriteNumberValue(TotalTokens); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("completion_tokens") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("completion_tokens"u8); + writer.WriteNumberValue(CompletionTokens); + } + if (SerializedAdditionalRawData?.ContainsKey("prompt_tokens") != true) + { + writer.WritePropertyName("prompt_tokens"u8); + writer.WriteNumberValue(PromptTokens); + } + if (SerializedAdditionalRawData?.ContainsKey("total_tokens") != true) + { + writer.WritePropertyName("total_tokens"u8); + writer.WriteNumberValue(TotalTokens); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static RunTokenUsage DeserializeRunTokenUsage(JsonElement element, Mode totalTokens = property.Value.GetInt32(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/RunTokenUsage.cs b/src/Generated/Models/RunTokenUsage.cs index 2cf1be74e..c961964df 100644 --- a/src/Generated/Models/RunTokenUsage.cs +++ b/src/Generated/Models/RunTokenUsage.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class RunTokenUsage { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal RunTokenUsage(int completionTokens, int promptTokens, int totalTokens) { CompletionTokens = completionTokens; @@ -23,7 +22,7 @@ internal RunTokenUsage(int completionTokens, int promptTokens, int totalTokens, CompletionTokens = completionTokens; PromptTokens = promptTokens; TotalTokens = totalTokens; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal RunTokenUsage() diff --git a/src/Generated/Models/RunTruncationStrategy.Serialization.cs b/src/Generated/Models/RunTruncationStrategy.Serialization.cs index e19170a39..aa08e0cbf 100644 --- a/src/Generated/Models/RunTruncationStrategy.Serialization.cs +++ b/src/Generated/Models/RunTruncationStrategy.Serialization.cs @@ -21,9 +21,12 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(_type.ToString()); - if (Optional.IsDefined(LastMessages)) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(_type.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("last_messages") != true && Optional.IsDefined(LastMessages)) { if (LastMessages != null) { @@ -35,10 +38,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("last_messages"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -94,8 +101,9 @@ internal static RunTruncationStrategy DeserializeRunTruncationStrategy(JsonEleme lastMessages = property.Value.GetInt32(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/RunTruncationStrategy.cs b/src/Generated/Models/RunTruncationStrategy.cs index f1c011b39..3fb0b2da8 100644 --- a/src/Generated/Models/RunTruncationStrategy.cs +++ b/src/Generated/Models/RunTruncationStrategy.cs @@ -13,7 +13,7 @@ internal RunTruncationStrategy(InternalTruncationObjectType type, int? lastMessa { _type = type; LastMessages = lastMessages; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal RunTruncationStrategy() diff --git a/src/Generated/Models/SpeechGenerationOptions.Serialization.cs b/src/Generated/Models/SpeechGenerationOptions.Serialization.cs index 4e136b063..87576b92f 100644 --- a/src/Generated/Models/SpeechGenerationOptions.Serialization.cs +++ b/src/Generated/Models/SpeechGenerationOptions.Serialization.cs @@ -21,26 +21,39 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade } writer.WriteStartObject(); - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model.ToString()); - writer.WritePropertyName("input"u8); - writer.WriteStringValue(Input); - writer.WritePropertyName("voice"u8); - writer.WriteStringValue(Voice.ToSerialString()); - if (Optional.IsDefined(ResponseFormat)) + if (SerializedAdditionalRawData?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); + writer.WriteStringValue(Input); + } + if (SerializedAdditionalRawData?.ContainsKey("voice") != true) + { + writer.WritePropertyName("voice"u8); + writer.WriteStringValue(Voice.ToSerialString()); + } + if (SerializedAdditionalRawData?.ContainsKey("response_format") != true && Optional.IsDefined(ResponseFormat)) { writer.WritePropertyName("response_format"u8); writer.WriteStringValue(ResponseFormat.Value.ToSerialString()); } - if (Optional.IsDefined(Speed)) + if (SerializedAdditionalRawData?.ContainsKey("speed") != true && Optional.IsDefined(Speed)) { writer.WritePropertyName("speed"u8); writer.WriteNumberValue(Speed.Value); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -117,8 +130,9 @@ internal static SpeechGenerationOptions DeserializeSpeechGenerationOptions(JsonE speed = property.Value.GetSingle(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/SpeechGenerationOptions.cs b/src/Generated/Models/SpeechGenerationOptions.cs index e4848d0f4..4a5b48c18 100644 --- a/src/Generated/Models/SpeechGenerationOptions.cs +++ b/src/Generated/Models/SpeechGenerationOptions.cs @@ -9,7 +9,7 @@ namespace OpenAI.Audio { public partial class SpeechGenerationOptions { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal SpeechGenerationOptions(InternalCreateSpeechRequestModel model, string input, GeneratedSpeechVoice voice, GeneratedSpeechFormat? responseFormat, float? speed, IDictionary serializedAdditionalRawData) { @@ -18,9 +18,9 @@ internal SpeechGenerationOptions(InternalCreateSpeechRequestModel model, string Voice = voice; ResponseFormat = responseFormat; Speed = speed; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public GeneratedSpeechFormat? ResponseFormat { get; init; } - public float? Speed { get; init; } + public GeneratedSpeechFormat? ResponseFormat { get; set; } + public float? Speed { get; set; } } } diff --git a/src/Generated/Models/StaticFileChunkingStrategy.Serialization.cs b/src/Generated/Models/StaticFileChunkingStrategy.Serialization.cs index 0d1fcf6f7..55be32ef2 100644 --- a/src/Generated/Models/StaticFileChunkingStrategy.Serialization.cs +++ b/src/Generated/Models/StaticFileChunkingStrategy.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } writer.WriteStartObject(); - writer.WritePropertyName("static"u8); - writer.WriteObjectValue(_internalDetails, options); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("static") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("static"u8); + writer.WriteObjectValue(_internalDetails, options); + } + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static StaticFileChunkingStrategy DeserializeStaticFileChunkingStrategy type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/StreamingChatCompletionUpdate.Serialization.cs b/src/Generated/Models/StreamingChatCompletionUpdate.Serialization.cs index d246e9833..d46b77fb0 100644 --- a/src/Generated/Models/StreamingChatCompletionUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingChatCompletionUpdate.Serialization.cs @@ -21,35 +21,54 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mode } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("choices"u8); - writer.WriteStartArray(); - foreach (var item in Choices) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); } - writer.WriteEndArray(); - writer.WritePropertyName("created"u8); - writer.WriteNumberValue(CreatedAt, "U"); - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model); - if (Optional.IsDefined(SystemFingerprint)) + if (SerializedAdditionalRawData?.ContainsKey("choices") != true) + { + writer.WritePropertyName("choices"u8); + writer.WriteStartArray(); + foreach (var item in Choices) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("created") != true) + { + writer.WritePropertyName("created"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (SerializedAdditionalRawData?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (SerializedAdditionalRawData?.ContainsKey("system_fingerprint") != true && Optional.IsDefined(SystemFingerprint)) { writer.WritePropertyName("system_fingerprint"u8); writer.WriteStringValue(SystemFingerprint); } - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - if (Optional.IsDefined(Usage)) + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("usage") != true && Optional.IsDefined(Usage)) { writer.WritePropertyName("usage"u8); writer.WriteObjectValue(Usage, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -139,8 +158,9 @@ internal static StreamingChatCompletionUpdate DeserializeStreamingChatCompletion usage = ChatTokenUsage.DeserializeChatTokenUsage(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/StreamingChatCompletionUpdate.cs b/src/Generated/Models/StreamingChatCompletionUpdate.cs index 5a308e7d6..8132fd98f 100644 --- a/src/Generated/Models/StreamingChatCompletionUpdate.cs +++ b/src/Generated/Models/StreamingChatCompletionUpdate.cs @@ -10,8 +10,7 @@ namespace OpenAI.Chat { public partial class StreamingChatCompletionUpdate { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal StreamingChatCompletionUpdate(string id, IEnumerable choices, DateTimeOffset createdAt, string model) { Argument.AssertNotNull(id, nameof(id)); @@ -33,7 +32,7 @@ internal StreamingChatCompletionUpdate(string id, IReadOnlyList.Write(Utf8JsonWriter writer, Mo } writer.WriteStartObject(); - if (Optional.IsDefined(FunctionArgumentsUpdate)) + if (SerializedAdditionalRawData?.ContainsKey("arguments") != true && Optional.IsDefined(FunctionArgumentsUpdate)) { writer.WritePropertyName("arguments"u8); writer.WriteStringValue(FunctionArgumentsUpdate); } - if (Optional.IsDefined(FunctionName)) + if (SerializedAdditionalRawData?.ContainsKey("name") != true && Optional.IsDefined(FunctionName)) { writer.WritePropertyName("name"u8); writer.WriteStringValue(FunctionName); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -85,8 +89,9 @@ internal static StreamingChatFunctionCallUpdate DeserializeStreamingChatFunction name = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/StreamingChatFunctionCallUpdate.cs b/src/Generated/Models/StreamingChatFunctionCallUpdate.cs index 5d57dd724..cdf403d42 100644 --- a/src/Generated/Models/StreamingChatFunctionCallUpdate.cs +++ b/src/Generated/Models/StreamingChatFunctionCallUpdate.cs @@ -9,8 +9,7 @@ namespace OpenAI.Chat { public partial class StreamingChatFunctionCallUpdate { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal StreamingChatFunctionCallUpdate() { } @@ -19,7 +18,7 @@ internal StreamingChatFunctionCallUpdate(string functionArgumentsUpdate, string { FunctionArgumentsUpdate = functionArgumentsUpdate; FunctionName = functionName; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } } } diff --git a/src/Generated/Models/StreamingChatToolCallUpdate.Serialization.cs b/src/Generated/Models/StreamingChatToolCallUpdate.Serialization.cs index fd57e4e6f..d1d2e25aa 100644 --- a/src/Generated/Models/StreamingChatToolCallUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingChatToolCallUpdate.Serialization.cs @@ -21,24 +21,34 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR } writer.WriteStartObject(); - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - if (Optional.IsDefined(Id)) + if (SerializedAdditionalRawData?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + if (SerializedAdditionalRawData?.ContainsKey("id") != true && Optional.IsDefined(Id)) { writer.WritePropertyName("id"u8); writer.WriteStringValue(Id); } - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Kind.ToString()); - if (Optional.IsDefined(Function)) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("function") != true && Optional.IsDefined(Function)) { writer.WritePropertyName("function"u8); writer.WriteObjectValue(Function, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -109,8 +119,9 @@ internal static StreamingChatToolCallUpdate DeserializeStreamingChatToolCallUpda function = InternalChatCompletionMessageToolCallChunkFunction.DeserializeInternalChatCompletionMessageToolCallChunkFunction(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/StreamingChatToolCallUpdate.cs b/src/Generated/Models/StreamingChatToolCallUpdate.cs index 81a570619..5d606fc1b 100644 --- a/src/Generated/Models/StreamingChatToolCallUpdate.cs +++ b/src/Generated/Models/StreamingChatToolCallUpdate.cs @@ -9,7 +9,7 @@ namespace OpenAI.Chat { public partial class StreamingChatToolCallUpdate { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal StreamingChatToolCallUpdate(int index, string id, ChatToolCallKind kind, InternalChatCompletionMessageToolCallChunkFunction function, IDictionary serializedAdditionalRawData) { @@ -17,7 +17,7 @@ internal StreamingChatToolCallUpdate(int index, string id, ChatToolCallKind kind Id = id; Kind = kind; Function = function; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal StreamingChatToolCallUpdate() diff --git a/src/Generated/Models/SystemChatMessage.Serialization.cs b/src/Generated/Models/SystemChatMessage.Serialization.cs index 5f2623f01..b3342e4c6 100644 --- a/src/Generated/Models/SystemChatMessage.Serialization.cs +++ b/src/Generated/Models/SystemChatMessage.Serialization.cs @@ -54,8 +54,9 @@ internal static SystemChatMessage DeserializeSystemChatMessage(JsonElement eleme DeserializeContentValue(property, ref content); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ThreadCreationOptions.Serialization.cs b/src/Generated/Models/ThreadCreationOptions.Serialization.cs index e2a9ab277..840bf6dc9 100644 --- a/src/Generated/Models/ThreadCreationOptions.Serialization.cs +++ b/src/Generated/Models/ThreadCreationOptions.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(InternalMessages)) + if (SerializedAdditionalRawData?.ContainsKey("messages") != true && Optional.IsCollectionDefined(InternalMessages)) { writer.WritePropertyName("messages"u8); writer.WriteStartArray(); @@ -31,7 +31,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW } writer.WriteEndArray(); } - if (Optional.IsDefined(ToolResources)) + if (SerializedAdditionalRawData?.ContainsKey("tool_resources") != true && Optional.IsDefined(ToolResources)) { if (ToolResources != null) { @@ -43,7 +43,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("tool_resources"); } } - if (Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true && Optional.IsCollectionDefined(Metadata)) { if (Metadata != null) { @@ -61,10 +61,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteNull("metadata"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -144,8 +148,9 @@ internal static ThreadCreationOptions DeserializeThreadCreationOptions(JsonEleme metadata = dictionary; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ThreadCreationOptions.cs b/src/Generated/Models/ThreadCreationOptions.cs index 542bd8c80..450cf612a 100644 --- a/src/Generated/Models/ThreadCreationOptions.cs +++ b/src/Generated/Models/ThreadCreationOptions.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class ThreadCreationOptions { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public ThreadCreationOptions() { InternalMessages = new ChangeTrackingList(); @@ -22,8 +21,8 @@ internal ThreadCreationOptions(IList internalMessages, T InternalMessages = internalMessages; ToolResources = toolResources; Metadata = metadata; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public IDictionary Metadata { get; } + public IDictionary Metadata { get; set; } } } diff --git a/src/Generated/Models/ThreadMessage.Serialization.cs b/src/Generated/Models/ThreadMessage.Serialization.cs index 25d6ccdc5..9787e5532 100644 --- a/src/Generated/Models/ThreadMessage.Serialization.cs +++ b/src/Generated/Models/ThreadMessage.Serialization.cs @@ -21,103 +21,149 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpt } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - writer.WritePropertyName("thread_id"u8); - writer.WriteStringValue(ThreadId); - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.ToString()); - if (IncompleteDetails != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - writer.WritePropertyName("incomplete_details"u8); - writer.WriteObjectValue(IncompleteDetails, options); + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); } - else + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - writer.WriteNull("incomplete_details"); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - if (CompletedAt != null) + if (SerializedAdditionalRawData?.ContainsKey("created_at") != true) { - writer.WritePropertyName("completed_at"u8); - writer.WriteNumberValue(CompletedAt.Value, "U"); + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); } - else + if (SerializedAdditionalRawData?.ContainsKey("thread_id") != true) { - writer.WriteNull("completed_at"); + writer.WritePropertyName("thread_id"u8); + writer.WriteStringValue(ThreadId); } - if (IncompleteAt != null) + if (SerializedAdditionalRawData?.ContainsKey("status") != true) { - writer.WritePropertyName("incomplete_at"u8); - writer.WriteNumberValue(IncompleteAt.Value, "U"); + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToString()); } - else + if (SerializedAdditionalRawData?.ContainsKey("incomplete_details") != true) { - writer.WriteNull("incomplete_at"); - } - writer.WritePropertyName("role"u8); - writer.WriteStringValue(Role.ToSerialString()); - writer.WritePropertyName("content"u8); - writer.WriteStartArray(); - foreach (var item in Content) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - if (AssistantId != null) - { - writer.WritePropertyName("assistant_id"u8); - writer.WriteStringValue(AssistantId); + if (IncompleteDetails != null) + { + writer.WritePropertyName("incomplete_details"u8); + writer.WriteObjectValue(IncompleteDetails, options); + } + else + { + writer.WriteNull("incomplete_details"); + } } - else + if (SerializedAdditionalRawData?.ContainsKey("completed_at") != true) { - writer.WriteNull("assistant_id"); + if (CompletedAt != null) + { + writer.WritePropertyName("completed_at"u8); + writer.WriteNumberValue(CompletedAt.Value, "U"); + } + else + { + writer.WriteNull("completed_at"); + } } - if (RunId != null) + if (SerializedAdditionalRawData?.ContainsKey("incomplete_at") != true) { - writer.WritePropertyName("run_id"u8); - writer.WriteStringValue(RunId); + if (IncompleteAt != null) + { + writer.WritePropertyName("incomplete_at"u8); + writer.WriteNumberValue(IncompleteAt.Value, "U"); + } + else + { + writer.WriteNull("incomplete_at"); + } } - else + if (SerializedAdditionalRawData?.ContainsKey("role") != true) { - writer.WriteNull("run_id"); + writer.WritePropertyName("role"u8); + writer.WriteStringValue(Role.ToSerialString()); } - if (Attachments != null && Optional.IsCollectionDefined(Attachments)) + if (SerializedAdditionalRawData?.ContainsKey("content") != true) { - writer.WritePropertyName("attachments"u8); + writer.WritePropertyName("content"u8); writer.WriteStartArray(); - foreach (var item in Attachments) + foreach (var item in Content) { - writer.WriteObjectValue(item, options); + writer.WriteObjectValue(item, options); } writer.WriteEndArray(); } - else + if (SerializedAdditionalRawData?.ContainsKey("assistant_id") != true) + { + if (AssistantId != null) + { + writer.WritePropertyName("assistant_id"u8); + writer.WriteStringValue(AssistantId); + } + else + { + writer.WriteNull("assistant_id"); + } + } + if (SerializedAdditionalRawData?.ContainsKey("run_id") != true) { - writer.WriteNull("attachments"); + if (RunId != null) + { + writer.WritePropertyName("run_id"u8); + writer.WriteStringValue(RunId); + } + else + { + writer.WriteNull("run_id"); + } } - if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("attachments") != true) { - writer.WritePropertyName("metadata"u8); - writer.WriteStartObject(); - foreach (var item in Metadata) + if (Attachments != null && Optional.IsCollectionDefined(Attachments)) { - writer.WritePropertyName(item.Key); - writer.WriteStringValue(item.Value); + writer.WritePropertyName("attachments"u8); + writer.WriteStartArray(); + foreach (var item in Attachments) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + else + { + writer.WriteNull("attachments"); } - writer.WriteEndObject(); } - else + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true) { - writer.WriteNull("metadata"); + if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + else + { + writer.WriteNull("metadata"); + } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -290,8 +336,9 @@ internal static ThreadMessage DeserializeThreadMessage(JsonElement element, Mode metadata = dictionary; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ThreadMessage.cs b/src/Generated/Models/ThreadMessage.cs index 6e34bd82c..ba5967d55 100644 --- a/src/Generated/Models/ThreadMessage.cs +++ b/src/Generated/Models/ThreadMessage.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { public partial class ThreadMessage { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal ThreadMessage(string id, DateTimeOffset createdAt, string threadId, MessageStatus status, MessageFailureDetails incompleteDetails, DateTimeOffset? completedAt, DateTimeOffset? incompleteAt, MessageRole role, IEnumerable content, string assistantId, string runId, IEnumerable attachments, IReadOnlyDictionary metadata) { Argument.AssertNotNull(id, nameof(id)); @@ -49,7 +48,7 @@ internal ThreadMessage(string id, InternalMessageObjectObject @object, DateTimeO RunId = runId; Attachments = attachments; Metadata = metadata; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal ThreadMessage() diff --git a/src/Generated/Models/ThreadModificationOptions.Serialization.cs b/src/Generated/Models/ThreadModificationOptions.Serialization.cs index a869b4780..dd5f8ba74 100644 --- a/src/Generated/Models/ThreadModificationOptions.Serialization.cs +++ b/src/Generated/Models/ThreadModificationOptions.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea } writer.WriteStartObject(); - if (Optional.IsDefined(ToolResources)) + if (SerializedAdditionalRawData?.ContainsKey("tool_resources") != true && Optional.IsDefined(ToolResources)) { if (ToolResources != null) { @@ -33,7 +33,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteNull("tool_resources"); } } - if (Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true && Optional.IsCollectionDefined(Metadata)) { if (Metadata != null) { @@ -51,10 +51,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteNull("metadata"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -119,8 +123,9 @@ internal static ThreadModificationOptions DeserializeThreadModificationOptions(J metadata = dictionary; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ThreadModificationOptions.cs b/src/Generated/Models/ThreadModificationOptions.cs index fb6e27006..b26090b10 100644 --- a/src/Generated/Models/ThreadModificationOptions.cs +++ b/src/Generated/Models/ThreadModificationOptions.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class ThreadModificationOptions { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public ThreadModificationOptions() { Metadata = new ChangeTrackingDictionary(); @@ -20,8 +19,8 @@ internal ThreadModificationOptions(ToolResources toolResources, IDictionary Metadata { get; } + public IDictionary Metadata { get; set; } } } diff --git a/src/Generated/Models/ThreadRun.Serialization.cs b/src/Generated/Models/ThreadRun.Serialization.cs index 62ba1a8e8..7ea22c7c2 100644 --- a/src/Generated/Models/ThreadRun.Serialization.cs +++ b/src/Generated/Models/ThreadRun.Serialization.cs @@ -21,126 +21,183 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - writer.WritePropertyName("thread_id"u8); - writer.WriteStringValue(ThreadId); - writer.WritePropertyName("assistant_id"u8); - writer.WriteStringValue(AssistantId); - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.ToString()); - if (_internalRequiredAction != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - writer.WritePropertyName("required_action"u8); - writer.WriteObjectValue(_internalRequiredAction, options); + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); } - else + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - writer.WriteNull("required_action"); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - if (LastError != null) + if (SerializedAdditionalRawData?.ContainsKey("created_at") != true) { - writer.WritePropertyName("last_error"u8); - writer.WriteObjectValue(LastError, options); + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); } - else + if (SerializedAdditionalRawData?.ContainsKey("thread_id") != true) { - writer.WriteNull("last_error"); + writer.WritePropertyName("thread_id"u8); + writer.WriteStringValue(ThreadId); } - if (ExpiresAt != null) + if (SerializedAdditionalRawData?.ContainsKey("assistant_id") != true) { - writer.WritePropertyName("expires_at"u8); - writer.WriteNumberValue(ExpiresAt.Value, "U"); + writer.WritePropertyName("assistant_id"u8); + writer.WriteStringValue(AssistantId); } - else + if (SerializedAdditionalRawData?.ContainsKey("status") != true) { - writer.WriteNull("expires_at"); + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToString()); } - if (StartedAt != null) + if (SerializedAdditionalRawData?.ContainsKey("required_action") != true) { - writer.WritePropertyName("started_at"u8); - writer.WriteNumberValue(StartedAt.Value, "U"); - } - else - { - writer.WriteNull("started_at"); + if (_internalRequiredAction != null) + { + writer.WritePropertyName("required_action"u8); + writer.WriteObjectValue(_internalRequiredAction, options); + } + else + { + writer.WriteNull("required_action"); + } } - if (CancelledAt != null) + if (SerializedAdditionalRawData?.ContainsKey("last_error") != true) { - writer.WritePropertyName("cancelled_at"u8); - writer.WriteNumberValue(CancelledAt.Value, "U"); + if (LastError != null) + { + writer.WritePropertyName("last_error"u8); + writer.WriteObjectValue(LastError, options); + } + else + { + writer.WriteNull("last_error"); + } } - else + if (SerializedAdditionalRawData?.ContainsKey("expires_at") != true) { - writer.WriteNull("cancelled_at"); + if (ExpiresAt != null) + { + writer.WritePropertyName("expires_at"u8); + writer.WriteNumberValue(ExpiresAt.Value, "U"); + } + else + { + writer.WriteNull("expires_at"); + } } - if (FailedAt != null) + if (SerializedAdditionalRawData?.ContainsKey("started_at") != true) { - writer.WritePropertyName("failed_at"u8); - writer.WriteNumberValue(FailedAt.Value, "U"); + if (StartedAt != null) + { + writer.WritePropertyName("started_at"u8); + writer.WriteNumberValue(StartedAt.Value, "U"); + } + else + { + writer.WriteNull("started_at"); + } } - else + if (SerializedAdditionalRawData?.ContainsKey("cancelled_at") != true) { - writer.WriteNull("failed_at"); + if (CancelledAt != null) + { + writer.WritePropertyName("cancelled_at"u8); + writer.WriteNumberValue(CancelledAt.Value, "U"); + } + else + { + writer.WriteNull("cancelled_at"); + } } - if (CompletedAt != null) + if (SerializedAdditionalRawData?.ContainsKey("failed_at") != true) { - writer.WritePropertyName("completed_at"u8); - writer.WriteNumberValue(CompletedAt.Value, "U"); + if (FailedAt != null) + { + writer.WritePropertyName("failed_at"u8); + writer.WriteNumberValue(FailedAt.Value, "U"); + } + else + { + writer.WriteNull("failed_at"); + } } - else + if (SerializedAdditionalRawData?.ContainsKey("completed_at") != true) { - writer.WriteNull("completed_at"); + if (CompletedAt != null) + { + writer.WritePropertyName("completed_at"u8); + writer.WriteNumberValue(CompletedAt.Value, "U"); + } + else + { + writer.WriteNull("completed_at"); + } } - if (IncompleteDetails != null) + if (SerializedAdditionalRawData?.ContainsKey("incomplete_details") != true) { - writer.WritePropertyName("incomplete_details"u8); - writer.WriteObjectValue(IncompleteDetails, options); + if (IncompleteDetails != null) + { + writer.WritePropertyName("incomplete_details"u8); + writer.WriteObjectValue(IncompleteDetails, options); + } + else + { + writer.WriteNull("incomplete_details"); + } } - else + if (SerializedAdditionalRawData?.ContainsKey("model") != true) { - writer.WriteNull("incomplete_details"); + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); } - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model); - writer.WritePropertyName("instructions"u8); - writer.WriteStringValue(Instructions); - writer.WritePropertyName("tools"u8); - writer.WriteStartArray(); - foreach (var item in Tools) + if (SerializedAdditionalRawData?.ContainsKey("instructions") != true) { - writer.WriteObjectValue(item, options); + writer.WritePropertyName("instructions"u8); + writer.WriteStringValue(Instructions); } - writer.WriteEndArray(); - if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("tools") != true) { - writer.WritePropertyName("metadata"u8); - writer.WriteStartObject(); - foreach (var item in Metadata) + writer.WritePropertyName("tools"u8); + writer.WriteStartArray(); + foreach (var item in Tools) { - writer.WritePropertyName(item.Key); - writer.WriteStringValue(item.Value); + writer.WriteObjectValue(item, options); } - writer.WriteEndObject(); - } - else - { - writer.WriteNull("metadata"); + writer.WriteEndArray(); } - if (Usage != null) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true) { - writer.WritePropertyName("usage"u8); - writer.WriteObjectValue(Usage, options); + if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + else + { + writer.WriteNull("metadata"); + } } - else + if (SerializedAdditionalRawData?.ContainsKey("usage") != true) { - writer.WriteNull("usage"); + if (Usage != null) + { + writer.WritePropertyName("usage"u8); + writer.WriteObjectValue(Usage, options); + } + else + { + writer.WriteNull("usage"); + } } - if (Optional.IsDefined(Temperature)) + if (SerializedAdditionalRawData?.ContainsKey("temperature") != true && Optional.IsDefined(Temperature)) { if (Temperature != null) { @@ -152,7 +209,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions writer.WriteNull("temperature"); } } - if (Optional.IsDefined(NucleusSamplingFactor)) + if (SerializedAdditionalRawData?.ContainsKey("top_p") != true && Optional.IsDefined(NucleusSamplingFactor)) { if (NucleusSamplingFactor != null) { @@ -164,57 +221,79 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions writer.WriteNull("top_p"); } } - if (MaxPromptTokens != null) - { - writer.WritePropertyName("max_prompt_tokens"u8); - writer.WriteNumberValue(MaxPromptTokens.Value); - } - else + if (SerializedAdditionalRawData?.ContainsKey("max_prompt_tokens") != true) { - writer.WriteNull("max_prompt_tokens"); - } - if (MaxCompletionTokens != null) - { - writer.WritePropertyName("max_completion_tokens"u8); - writer.WriteNumberValue(MaxCompletionTokens.Value); - } - else - { - writer.WriteNull("max_completion_tokens"); - } - if (TruncationStrategy != null) - { - writer.WritePropertyName("truncation_strategy"u8); - writer.WriteObjectValue(TruncationStrategy, options); + if (MaxPromptTokens != null) + { + writer.WritePropertyName("max_prompt_tokens"u8); + writer.WriteNumberValue(MaxPromptTokens.Value); + } + else + { + writer.WriteNull("max_prompt_tokens"); + } } - else + if (SerializedAdditionalRawData?.ContainsKey("max_completion_tokens") != true) { - writer.WriteNull("truncation_strategy"); + if (MaxCompletionTokens != null) + { + writer.WritePropertyName("max_completion_tokens"u8); + writer.WriteNumberValue(MaxCompletionTokens.Value); + } + else + { + writer.WriteNull("max_completion_tokens"); + } } - if (ToolConstraint != null) + if (SerializedAdditionalRawData?.ContainsKey("truncation_strategy") != true) { - writer.WritePropertyName("tool_choice"u8); - writer.WriteObjectValue(ToolConstraint, options); + if (TruncationStrategy != null) + { + writer.WritePropertyName("truncation_strategy"u8); + writer.WriteObjectValue(TruncationStrategy, options); + } + else + { + writer.WriteNull("truncation_strategy"); + } } - else + if (SerializedAdditionalRawData?.ContainsKey("tool_choice") != true) { - writer.WriteNull("tool_choice"); + if (ToolConstraint != null) + { + writer.WritePropertyName("tool_choice"u8); + writer.WriteObjectValue(ToolConstraint, options); + } + else + { + writer.WriteNull("tool_choice"); + } } - writer.WritePropertyName("parallel_tool_calls"u8); - writer.WriteBooleanValue(ParallelToolCallsEnabled.Value); - if (ResponseFormat != null) + if (SerializedAdditionalRawData?.ContainsKey("parallel_tool_calls") != true) { - writer.WritePropertyName("response_format"u8); - writer.WriteObjectValue(ResponseFormat, options); + writer.WritePropertyName("parallel_tool_calls"u8); + writer.WriteBooleanValue(ParallelToolCallsEnabled.Value); } - else + if (SerializedAdditionalRawData?.ContainsKey("response_format") != true) { - writer.WriteNull("response_format"); + if (ResponseFormat != null) + { + writer.WritePropertyName("response_format"u8); + writer.WriteObjectValue(ResponseFormat, options); + } + else + { + writer.WriteNull("response_format"); + } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -510,8 +589,9 @@ internal static ThreadRun DeserializeThreadRun(JsonElement element, ModelReaderW responseFormat = AssistantResponseFormat.DeserializeAssistantResponseFormat(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ThreadRun.cs b/src/Generated/Models/ThreadRun.cs index 3544555f1..cc4a44572 100644 --- a/src/Generated/Models/ThreadRun.cs +++ b/src/Generated/Models/ThreadRun.cs @@ -10,7 +10,7 @@ namespace OpenAI.Assistants { public partial class ThreadRun { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal ThreadRun(string id, InternalRunObjectObject @object, DateTimeOffset createdAt, string threadId, string assistantId, RunStatus status, InternalRunRequiredAction internalRequiredAction, RunError lastError, DateTimeOffset? expiresAt, DateTimeOffset? startedAt, DateTimeOffset? cancelledAt, DateTimeOffset? failedAt, DateTimeOffset? completedAt, RunIncompleteDetails incompleteDetails, string model, string instructions, IReadOnlyList tools, IReadOnlyDictionary metadata, RunTokenUsage usage, float? temperature, float? nucleusSamplingFactor, int? maxPromptTokens, int? maxCompletionTokens, RunTruncationStrategy truncationStrategy, ToolConstraint toolConstraint, bool? parallelToolCallsEnabled, AssistantResponseFormat responseFormat, IDictionary serializedAdditionalRawData) { @@ -41,7 +41,7 @@ internal ThreadRun(string id, InternalRunObjectObject @object, DateTimeOffset cr ToolConstraint = toolConstraint; ParallelToolCallsEnabled = parallelToolCallsEnabled; ResponseFormat = responseFormat; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal ThreadRun() diff --git a/src/Generated/Models/ToolChatMessage.Serialization.cs b/src/Generated/Models/ToolChatMessage.Serialization.cs index 422e245e3..9844c178e 100644 --- a/src/Generated/Models/ToolChatMessage.Serialization.cs +++ b/src/Generated/Models/ToolChatMessage.Serialization.cs @@ -54,8 +54,9 @@ internal static ToolChatMessage DeserializeToolChatMessage(JsonElement element, DeserializeContentValue(property, ref content); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ToolConstraint.cs b/src/Generated/Models/ToolConstraint.cs index 9be9bf373..519953a5f 100644 --- a/src/Generated/Models/ToolConstraint.cs +++ b/src/Generated/Models/ToolConstraint.cs @@ -13,7 +13,7 @@ internal ToolConstraint(string objectType, InternalAssistantsNamedToolChoiceFunc { _objectType = objectType; Function = function; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal ToolConstraint() diff --git a/src/Generated/Models/ToolDefinition.cs b/src/Generated/Models/ToolDefinition.cs index 4331567db..8f3a99763 100644 --- a/src/Generated/Models/ToolDefinition.cs +++ b/src/Generated/Models/ToolDefinition.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public abstract partial class ToolDefinition { - private protected IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } protected ToolDefinition() { } @@ -18,9 +17,9 @@ protected ToolDefinition() internal ToolDefinition(string type, IDictionary serializedAdditionalRawData) { Type = type; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - internal string Type { get; init; } + internal string Type { get; set; } } } diff --git a/src/Generated/Models/ToolOutput.Serialization.cs b/src/Generated/Models/ToolOutput.Serialization.cs index c52de5f86..e8267b3a1 100644 --- a/src/Generated/Models/ToolOutput.Serialization.cs +++ b/src/Generated/Models/ToolOutput.Serialization.cs @@ -21,20 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOption } writer.WriteStartObject(); - if (Optional.IsDefined(ToolCallId)) + if (SerializedAdditionalRawData?.ContainsKey("tool_call_id") != true && Optional.IsDefined(ToolCallId)) { writer.WritePropertyName("tool_call_id"u8); writer.WriteStringValue(ToolCallId); } - if (Optional.IsDefined(Output)) + if (SerializedAdditionalRawData?.ContainsKey("output") != true && Optional.IsDefined(Output)) { writer.WritePropertyName("output"u8); writer.WriteStringValue(Output); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -85,8 +89,9 @@ internal static ToolOutput DeserializeToolOutput(JsonElement element, ModelReade output = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ToolOutput.cs b/src/Generated/Models/ToolOutput.cs index 9b9d7a6d8..0e7b6441b 100644 --- a/src/Generated/Models/ToolOutput.cs +++ b/src/Generated/Models/ToolOutput.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class ToolOutput { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public ToolOutput() { } @@ -19,10 +18,10 @@ internal ToolOutput(string toolCallId, string output, IDictionary.Write(Utf8JsonWriter writer, ModelReaderWriterOpt } writer.WriteStartObject(); - if (Optional.IsDefined(CodeInterpreter)) + if (SerializedAdditionalRawData?.ContainsKey("code_interpreter") != true && Optional.IsDefined(CodeInterpreter)) { writer.WritePropertyName("code_interpreter"u8); writer.WriteObjectValue(CodeInterpreter, options); } - if (Optional.IsDefined(FileSearch)) + if (SerializedAdditionalRawData?.ContainsKey("file_search") != true && Optional.IsDefined(FileSearch)) { writer.WritePropertyName("file_search"u8); SerializeFileSearch(writer, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -93,8 +97,9 @@ internal static ToolResources DeserializeToolResources(JsonElement element, Mode fileSearch = FileSearchToolResources.DeserializeFileSearchToolResources(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/ToolResources.cs b/src/Generated/Models/ToolResources.cs index 02f4ec95c..67b190971 100644 --- a/src/Generated/Models/ToolResources.cs +++ b/src/Generated/Models/ToolResources.cs @@ -9,13 +9,13 @@ namespace OpenAI.Assistants { public partial class ToolResources { - internal IDictionary _serializedAdditionalRawData; + internal IDictionary SerializedAdditionalRawData { get; set; } internal ToolResources(CodeInterpreterToolResources codeInterpreter, FileSearchToolResources fileSearch, IDictionary serializedAdditionalRawData) { CodeInterpreter = codeInterpreter; FileSearch = fileSearch; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } } } diff --git a/src/Generated/Models/TranscribedSegment.Serialization.cs b/src/Generated/Models/TranscribedSegment.Serialization.cs index 6b010f71a..6abf6ad78 100644 --- a/src/Generated/Models/TranscribedSegment.Serialization.cs +++ b/src/Generated/Models/TranscribedSegment.Serialization.cs @@ -21,35 +21,69 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteNumberValue(Id); - writer.WritePropertyName("seek"u8); - writer.WriteNumberValue(SeekOffset); - writer.WritePropertyName("start"u8); - writer.WriteNumberValue(Convert.ToDouble(Start.ToString("s\\.FFF"))); - writer.WritePropertyName("end"u8); - writer.WriteNumberValue(Convert.ToDouble(End.ToString("s\\.FFF"))); - writer.WritePropertyName("text"u8); - writer.WriteStringValue(Text); - writer.WritePropertyName("tokens"u8); - writer.WriteStartArray(); - foreach (var item in TokenIds) - { - writer.WriteNumberValue(item); - } - writer.WriteEndArray(); - writer.WritePropertyName("temperature"u8); - writer.WriteNumberValue(Temperature); - writer.WritePropertyName("avg_logprob"u8); - writer.WriteNumberValue(AverageLogProbability); - writer.WritePropertyName("compression_ratio"u8); - writer.WriteNumberValue(CompressionRatio); - writer.WritePropertyName("no_speech_prob"u8); - writer.WriteNumberValue(NoSpeechProbability); - if (true && _serializedAdditionalRawData != null) - { - foreach (var item in _serializedAdditionalRawData) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteNumberValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("seek") != true) + { + writer.WritePropertyName("seek"u8); + writer.WriteNumberValue(SeekOffset); + } + if (SerializedAdditionalRawData?.ContainsKey("start") != true) + { + writer.WritePropertyName("start"u8); + writer.WriteNumberValue(Convert.ToDouble(Start.ToString("s\\.FFF"))); + } + if (SerializedAdditionalRawData?.ContainsKey("end") != true) + { + writer.WritePropertyName("end"u8); + writer.WriteNumberValue(Convert.ToDouble(End.ToString("s\\.FFF"))); + } + if (SerializedAdditionalRawData?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + if (SerializedAdditionalRawData?.ContainsKey("tokens") != true) + { + writer.WritePropertyName("tokens"u8); + writer.WriteStartArray(); + foreach (var item in TokenIds) { + writer.WriteNumberValue(item); + } + writer.WriteEndArray(); + } + if (SerializedAdditionalRawData?.ContainsKey("temperature") != true) + { + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature); + } + if (SerializedAdditionalRawData?.ContainsKey("avg_logprob") != true) + { + writer.WritePropertyName("avg_logprob"u8); + writer.WriteNumberValue(AverageLogProbability); + } + if (SerializedAdditionalRawData?.ContainsKey("compression_ratio") != true) + { + writer.WritePropertyName("compression_ratio"u8); + writer.WriteNumberValue(CompressionRatio); + } + if (SerializedAdditionalRawData?.ContainsKey("no_speech_prob") != true) + { + writer.WritePropertyName("no_speech_prob"u8); + writer.WriteNumberValue(NoSpeechProbability); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -153,8 +187,9 @@ internal static TranscribedSegment DeserializeTranscribedSegment(JsonElement ele noSpeechProb = property.Value.GetDouble(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/TranscribedSegment.cs b/src/Generated/Models/TranscribedSegment.cs index b87078296..965788cc6 100644 --- a/src/Generated/Models/TranscribedSegment.cs +++ b/src/Generated/Models/TranscribedSegment.cs @@ -10,8 +10,6 @@ namespace OpenAI.Audio { public readonly partial struct TranscribedSegment { - private readonly IDictionary _serializedAdditionalRawData; - internal TranscribedSegment(int id, long seekOffset, TimeSpan start, TimeSpan end, string text, IEnumerable tokenIds, float temperature, double averageLogProbability, float compressionRatio, double noSpeechProbability) { Argument.AssertNotNull(text, nameof(text)); @@ -41,7 +39,7 @@ internal TranscribedSegment(int id, long seekOffset, TimeSpan start, TimeSpan en AverageLogProbability = averageLogProbability; CompressionRatio = compressionRatio; NoSpeechProbability = noSpeechProbability; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public TranscribedSegment() diff --git a/src/Generated/Models/TranscribedWord.Serialization.cs b/src/Generated/Models/TranscribedWord.Serialization.cs index 7f7855e56..5b690d693 100644 --- a/src/Generated/Models/TranscribedWord.Serialization.cs +++ b/src/Generated/Models/TranscribedWord.Serialization.cs @@ -21,16 +21,29 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterO } writer.WriteStartObject(); - writer.WritePropertyName("word"u8); - writer.WriteStringValue(Word); - writer.WritePropertyName("start"u8); - writer.WriteNumberValue(Convert.ToDouble(Start.ToString("s\\.FFF"))); - writer.WritePropertyName("end"u8); - writer.WriteNumberValue(Convert.ToDouble(End.ToString("s\\.FFF"))); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("word") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("word"u8); + writer.WriteStringValue(Word); + } + if (SerializedAdditionalRawData?.ContainsKey("start") != true) + { + writer.WritePropertyName("start"u8); + writer.WriteNumberValue(Convert.ToDouble(Start.ToString("s\\.FFF"))); + } + if (SerializedAdditionalRawData?.ContainsKey("end") != true) + { + writer.WritePropertyName("end"u8); + writer.WriteNumberValue(Convert.ToDouble(End.ToString("s\\.FFF"))); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -87,8 +100,9 @@ internal static TranscribedWord DeserializeTranscribedWord(JsonElement element, end = TimeSpan.FromSeconds(property.Value.GetDouble()); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/TranscribedWord.cs b/src/Generated/Models/TranscribedWord.cs index 613c73c64..0426c1992 100644 --- a/src/Generated/Models/TranscribedWord.cs +++ b/src/Generated/Models/TranscribedWord.cs @@ -9,8 +9,6 @@ namespace OpenAI.Audio { public readonly partial struct TranscribedWord { - private readonly IDictionary _serializedAdditionalRawData; - internal TranscribedWord(string word, TimeSpan start, TimeSpan end) { Argument.AssertNotNull(word, nameof(word)); @@ -25,7 +23,7 @@ internal TranscribedWord(string word, TimeSpan start, TimeSpan end, IDictionary< Word = word; Start = start; End = end; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } public TranscribedWord() diff --git a/src/Generated/Models/UnknownAssistantToolDefinition.Serialization.cs b/src/Generated/Models/UnknownAssistantToolDefinition.Serialization.cs index 222bf3d9d..ee0b95a63 100644 --- a/src/Generated/Models/UnknownAssistantToolDefinition.Serialization.cs +++ b/src/Generated/Models/UnknownAssistantToolDefinition.Serialization.cs @@ -42,8 +42,9 @@ internal static UnknownAssistantToolDefinition DeserializeUnknownAssistantToolDe type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.Serialization.cs b/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.Serialization.cs index 18394509c..2115ac1cf 100644 --- a/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.Serialization.cs +++ b/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static UnknownMessageContentTextObjectAnnotation DeserializeUnknownMess type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/UnknownMessageDeltaContent.Serialization.cs b/src/Generated/Models/UnknownMessageDeltaContent.Serialization.cs index 777d8a72f..2b21c2f1e 100644 --- a/src/Generated/Models/UnknownMessageDeltaContent.Serialization.cs +++ b/src/Generated/Models/UnknownMessageDeltaContent.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWri } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static UnknownMessageDeltaContent DeserializeUnknownMessageDeltaContent type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.Serialization.cs b/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.Serialization.cs index a7a3f2a68..bcac7574e 100644 --- a/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.Serialization.cs +++ b/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static UnknownMessageDeltaTextContentAnnotation DeserializeUnknownMessa type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/UnknownRunStepDeltaStepDetails.Serialization.cs b/src/Generated/Models/UnknownRunStepDeltaStepDetails.Serialization.cs index fdb2cc817..cb38f3394 100644 --- a/src/Generated/Models/UnknownRunStepDeltaStepDetails.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDeltaStepDetails.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static UnknownRunStepDeltaStepDetails DeserializeUnknownRunStepDeltaSte type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs index 0c3daf57d..0313b67d5 100644 --- a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs index 64e4e0048..4248a166c 100644 --- a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.W } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject Des type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs b/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs index 9b203e355..797541cb3 100644 --- a/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsOb type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.Serialization.cs b/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.Serialization.cs index 7ed834778..74a75b71b 100644 --- a/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterO } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static UnknownRunStepDetailsToolCallsObjectToolCallsObject DeserializeU type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/UnknownRunStepObjectStepDetails.Serialization.cs b/src/Generated/Models/UnknownRunStepObjectStepDetails.Serialization.cs index 85341b504..680d5656c 100644 --- a/src/Generated/Models/UnknownRunStepObjectStepDetails.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepObjectStepDetails.Serialization.cs @@ -21,12 +21,19 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOp } writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("type") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -71,8 +78,9 @@ internal static UnknownRunStepObjectStepDetails DeserializeUnknownRunStepObjectS type = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/UserChatMessage.Serialization.cs b/src/Generated/Models/UserChatMessage.Serialization.cs index 8a484185d..00e8a2e41 100644 --- a/src/Generated/Models/UserChatMessage.Serialization.cs +++ b/src/Generated/Models/UserChatMessage.Serialization.cs @@ -54,8 +54,9 @@ internal static UserChatMessage DeserializeUserChatMessage(JsonElement element, DeserializeContentValue(property, ref content); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/VectorStore.Serialization.cs b/src/Generated/Models/VectorStore.Serialization.cs index fac8d8356..da9a00fda 100644 --- a/src/Generated/Models/VectorStore.Serialization.cs +++ b/src/Generated/Models/VectorStore.Serialization.cs @@ -21,26 +21,47 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptio } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - writer.WritePropertyName("usage_bytes"u8); - writer.WriteNumberValue(UsageBytes); - writer.WritePropertyName("file_counts"u8); - writer.WriteObjectValue(FileCounts, options); - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.ToSerialString()); - if (Optional.IsDefined(ExpirationPolicy)) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (SerializedAdditionalRawData?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (SerializedAdditionalRawData?.ContainsKey("usage_bytes") != true) + { + writer.WritePropertyName("usage_bytes"u8); + writer.WriteNumberValue(UsageBytes); + } + if (SerializedAdditionalRawData?.ContainsKey("file_counts") != true) + { + writer.WritePropertyName("file_counts"u8); + writer.WriteObjectValue(FileCounts, options); + } + if (SerializedAdditionalRawData?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToSerialString()); + } + if (SerializedAdditionalRawData?.ContainsKey("expires_after") != true && Optional.IsDefined(ExpirationPolicy)) { writer.WritePropertyName("expires_after"u8); writer.WriteObjectValue(ExpirationPolicy, options); } - if (Optional.IsDefined(ExpiresAt)) + if (SerializedAdditionalRawData?.ContainsKey("expires_at") != true && Optional.IsDefined(ExpiresAt)) { if (ExpiresAt != null) { @@ -52,34 +73,44 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptio writer.WriteNull("expires_at"); } } - if (LastActiveAt != null) - { - writer.WritePropertyName("last_active_at"u8); - writer.WriteNumberValue(LastActiveAt.Value, "U"); - } - else + if (SerializedAdditionalRawData?.ContainsKey("last_active_at") != true) { - writer.WriteNull("last_active_at"); - } - if (Metadata != null && Optional.IsCollectionDefined(Metadata)) - { - writer.WritePropertyName("metadata"u8); - writer.WriteStartObject(); - foreach (var item in Metadata) + if (LastActiveAt != null) { - writer.WritePropertyName(item.Key); - writer.WriteStringValue(item.Value); + writer.WritePropertyName("last_active_at"u8); + writer.WriteNumberValue(LastActiveAt.Value, "U"); + } + else + { + writer.WriteNull("last_active_at"); } - writer.WriteEndObject(); } - else + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true) { - writer.WriteNull("metadata"); + if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + else + { + writer.WriteNull("metadata"); + } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -208,8 +239,9 @@ internal static VectorStore DeserializeVectorStore(JsonElement element, ModelRea metadata = dictionary; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/VectorStore.cs b/src/Generated/Models/VectorStore.cs index 98271727f..3f39a41e2 100644 --- a/src/Generated/Models/VectorStore.cs +++ b/src/Generated/Models/VectorStore.cs @@ -9,12 +9,12 @@ namespace OpenAI.VectorStores { public partial class VectorStore { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal VectorStore(string id, DateTimeOffset createdAt, string name, int usageBytes, VectorStoreFileCounts fileCounts, VectorStoreStatus status, DateTimeOffset? lastActiveAt, IReadOnlyDictionary metadata) { Argument.AssertNotNull(id, nameof(id)); Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(fileCounts, nameof(fileCounts)); Id = id; CreatedAt = createdAt; @@ -39,7 +39,7 @@ internal VectorStore(string id, InternalVectorStoreObjectObject @object, DateTim ExpiresAt = expiresAt; LastActiveAt = lastActiveAt; Metadata = metadata; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal VectorStore() diff --git a/src/Generated/Models/VectorStoreBatchFileJob.Serialization.cs b/src/Generated/Models/VectorStoreBatchFileJob.Serialization.cs index 713eeb769..14f557aa4 100644 --- a/src/Generated/Models/VectorStoreBatchFileJob.Serialization.cs +++ b/src/Generated/Models/VectorStoreBatchFileJob.Serialization.cs @@ -21,22 +21,44 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(BatchId); - writer.WritePropertyName("object"u8); - writer.WriteObjectValue(Object, options); - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - writer.WritePropertyName("vector_store_id"u8); - writer.WriteStringValue(VectorStoreId); - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.ToString()); - writer.WritePropertyName("file_counts"u8); - writer.WriteObjectValue(FileCounts, options); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("id"u8); + writer.WriteStringValue(BatchId); + } + if (SerializedAdditionalRawData?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteObjectValue(Object, options); + } + if (SerializedAdditionalRawData?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (SerializedAdditionalRawData?.ContainsKey("vector_store_id") != true) + { + writer.WritePropertyName("vector_store_id"u8); + writer.WriteStringValue(VectorStoreId); + } + if (SerializedAdditionalRawData?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("file_counts") != true) + { + writer.WritePropertyName("file_counts"u8); + writer.WriteObjectValue(FileCounts, options); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -111,8 +133,9 @@ internal static VectorStoreBatchFileJob DeserializeVectorStoreBatchFileJob(JsonE fileCounts = VectorStoreFileCounts.DeserializeVectorStoreFileCounts(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/VectorStoreBatchFileJob.cs b/src/Generated/Models/VectorStoreBatchFileJob.cs index 3b159d0f0..a584a5e60 100644 --- a/src/Generated/Models/VectorStoreBatchFileJob.cs +++ b/src/Generated/Models/VectorStoreBatchFileJob.cs @@ -9,12 +9,12 @@ namespace OpenAI.VectorStores { public partial class VectorStoreBatchFileJob { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal VectorStoreBatchFileJob(string batchId, DateTimeOffset createdAt, string vectorStoreId, VectorStoreBatchFileJobStatus status, VectorStoreFileCounts fileCounts) { Argument.AssertNotNull(batchId, nameof(batchId)); Argument.AssertNotNull(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNull(fileCounts, nameof(fileCounts)); BatchId = batchId; CreatedAt = createdAt; @@ -31,7 +31,7 @@ internal VectorStoreBatchFileJob(string batchId, object @object, DateTimeOffset VectorStoreId = vectorStoreId; Status = status; FileCounts = fileCounts; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal VectorStoreBatchFileJob() diff --git a/src/Generated/Models/VectorStoreCreationHelper.Serialization.cs b/src/Generated/Models/VectorStoreCreationHelper.Serialization.cs index c7b746115..7d1b2942b 100644 --- a/src/Generated/Models/VectorStoreCreationHelper.Serialization.cs +++ b/src/Generated/Models/VectorStoreCreationHelper.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(FileIds)) + if (SerializedAdditionalRawData?.ContainsKey("file_ids") != true && Optional.IsCollectionDefined(FileIds)) { writer.WritePropertyName("file_ids"u8); writer.WriteStartArray(); @@ -31,7 +31,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea } writer.WriteEndArray(); } - if (Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true && Optional.IsCollectionDefined(Metadata)) { writer.WritePropertyName("metadata"u8); writer.WriteStartObject(); @@ -42,10 +42,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea } writer.WriteEndObject(); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -114,8 +118,9 @@ internal static VectorStoreCreationHelper DeserializeVectorStoreCreationHelper(J metadata = dictionary; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/VectorStoreCreationHelper.cs b/src/Generated/Models/VectorStoreCreationHelper.cs index 0a0500df9..e8d2702b5 100644 --- a/src/Generated/Models/VectorStoreCreationHelper.cs +++ b/src/Generated/Models/VectorStoreCreationHelper.cs @@ -9,8 +9,7 @@ namespace OpenAI.Assistants { public partial class VectorStoreCreationHelper { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public VectorStoreCreationHelper() { FileIds = new ChangeTrackingList(); @@ -21,7 +20,7 @@ internal VectorStoreCreationHelper(IList fileIds, IDictionary FileIds { get; } diff --git a/src/Generated/Models/VectorStoreCreationOptions.Serialization.cs b/src/Generated/Models/VectorStoreCreationOptions.Serialization.cs index 8fd567ba8..d8303a3a1 100644 --- a/src/Generated/Models/VectorStoreCreationOptions.Serialization.cs +++ b/src/Generated/Models/VectorStoreCreationOptions.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } writer.WriteStartObject(); - if (Optional.IsCollectionDefined(FileIds)) + if (SerializedAdditionalRawData?.ContainsKey("file_ids") != true && Optional.IsCollectionDefined(FileIds)) { writer.WritePropertyName("file_ids"u8); writer.WriteStartArray(); @@ -31,22 +31,22 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } writer.WriteEndArray(); } - if (Optional.IsDefined(Name)) + if (SerializedAdditionalRawData?.ContainsKey("name") != true && Optional.IsDefined(Name)) { writer.WritePropertyName("name"u8); writer.WriteStringValue(Name); } - if (Optional.IsDefined(ExpirationPolicy)) + if (SerializedAdditionalRawData?.ContainsKey("expires_after") != true && Optional.IsDefined(ExpirationPolicy)) { writer.WritePropertyName("expires_after"u8); writer.WriteObjectValue(ExpirationPolicy, options); } - if (Optional.IsDefined(ChunkingStrategy)) + if (SerializedAdditionalRawData?.ContainsKey("chunking_strategy") != true && Optional.IsDefined(ChunkingStrategy)) { writer.WritePropertyName("chunking_strategy"u8); writer.WriteObjectValue(ChunkingStrategy, options); } - if (Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true && Optional.IsCollectionDefined(Metadata)) { if (Metadata != null) { @@ -64,10 +64,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteNull("metadata"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -162,8 +166,9 @@ internal static VectorStoreCreationOptions DeserializeVectorStoreCreationOptions metadata = dictionary; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/VectorStoreCreationOptions.cs b/src/Generated/Models/VectorStoreCreationOptions.cs index 8ab8faf55..6c26058e0 100644 --- a/src/Generated/Models/VectorStoreCreationOptions.cs +++ b/src/Generated/Models/VectorStoreCreationOptions.cs @@ -9,8 +9,7 @@ namespace OpenAI.VectorStores { public partial class VectorStoreCreationOptions { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public VectorStoreCreationOptions() { FileIds = new ChangeTrackingList(); @@ -24,9 +23,9 @@ internal VectorStoreCreationOptions(IList fileIds, string name, VectorSt ExpirationPolicy = expirationPolicy; ChunkingStrategy = chunkingStrategy; Metadata = metadata; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public string Name { get; init; } - public IDictionary Metadata { get; } + public string Name { get; set; } + public IDictionary Metadata { get; set; } } } diff --git a/src/Generated/Models/VectorStoreExpirationPolicy.Serialization.cs b/src/Generated/Models/VectorStoreExpirationPolicy.Serialization.cs index e27f8d301..389d5de38 100644 --- a/src/Generated/Models/VectorStoreExpirationPolicy.Serialization.cs +++ b/src/Generated/Models/VectorStoreExpirationPolicy.Serialization.cs @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR } writer.WriteStartObject(); - writer.WritePropertyName("anchor"u8); - writer.WriteStringValue(_anchor.ToSerialString()); - writer.WritePropertyName("days"u8); - writer.WriteNumberValue(_days); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("anchor") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("anchor"u8); + writer.WriteStringValue(_anchor.ToSerialString()); + } + if (SerializedAdditionalRawData?.ContainsKey("days") != true) + { + writer.WritePropertyName("days"u8); + writer.WriteNumberValue(_days); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -79,8 +89,9 @@ internal static VectorStoreExpirationPolicy DeserializeVectorStoreExpirationPoli days = property.Value.GetInt32(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/VectorStoreFileAssociation.Serialization.cs b/src/Generated/Models/VectorStoreFileAssociation.Serialization.cs index 0b3490d1b..13b4257d1 100644 --- a/src/Generated/Models/VectorStoreFileAssociation.Serialization.cs +++ b/src/Generated/Models/VectorStoreFileAssociation.Serialization.cs @@ -21,36 +21,61 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe } writer.WriteStartObject(); - writer.WritePropertyName("id"u8); - writer.WriteStringValue(FileId); - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - writer.WritePropertyName("usage_bytes"u8); - writer.WriteNumberValue(Size); - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - writer.WritePropertyName("vector_store_id"u8); - writer.WriteStringValue(VectorStoreId); - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.ToSerialString()); - if (LastError != null) + if (SerializedAdditionalRawData?.ContainsKey("id") != true) { - writer.WritePropertyName("last_error"u8); - writer.WriteObjectValue(LastError, options); + writer.WritePropertyName("id"u8); + writer.WriteStringValue(FileId); } - else + if (SerializedAdditionalRawData?.ContainsKey("object") != true) { - writer.WriteNull("last_error"); + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); } - if (Optional.IsDefined(ChunkingStrategy)) + if (SerializedAdditionalRawData?.ContainsKey("usage_bytes") != true) + { + writer.WritePropertyName("usage_bytes"u8); + writer.WriteNumberValue(Size); + } + if (SerializedAdditionalRawData?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (SerializedAdditionalRawData?.ContainsKey("vector_store_id") != true) + { + writer.WritePropertyName("vector_store_id"u8); + writer.WriteStringValue(VectorStoreId); + } + if (SerializedAdditionalRawData?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToSerialString()); + } + if (SerializedAdditionalRawData?.ContainsKey("last_error") != true) + { + if (LastError != null) + { + writer.WritePropertyName("last_error"u8); + writer.WriteObjectValue(LastError, options); + } + else + { + writer.WriteNull("last_error"); + } + } + if (SerializedAdditionalRawData?.ContainsKey("chunking_strategy") != true && Optional.IsDefined(ChunkingStrategy)) { writer.WritePropertyName("chunking_strategy"u8); writer.WriteObjectValue(ChunkingStrategy, options); } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -91,7 +116,7 @@ internal static VectorStoreFileAssociation DeserializeVectorStoreFileAssociation DateTimeOffset createdAt = default; string vectorStoreId = default; VectorStoreFileAssociationStatus status = default; - VectorStoreFileAssociationError? lastError = default; + VectorStoreFileAssociationError lastError = default; FileChunkingStrategy chunkingStrategy = default; IDictionary serializedAdditionalRawData = default; Dictionary rawDataDictionary = new Dictionary(); @@ -146,8 +171,9 @@ internal static VectorStoreFileAssociation DeserializeVectorStoreFileAssociation chunkingStrategy = FileChunkingStrategy.DeserializeFileChunkingStrategy(property.Value, options); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/VectorStoreFileAssociation.cs b/src/Generated/Models/VectorStoreFileAssociation.cs index 68f115853..c7da0b027 100644 --- a/src/Generated/Models/VectorStoreFileAssociation.cs +++ b/src/Generated/Models/VectorStoreFileAssociation.cs @@ -9,9 +9,8 @@ namespace OpenAI.VectorStores { public partial class VectorStoreFileAssociation { - internal IDictionary _serializedAdditionalRawData; - - internal VectorStoreFileAssociation(string fileId, int size, DateTimeOffset createdAt, string vectorStoreId, VectorStoreFileAssociationStatus status, VectorStoreFileAssociationError? lastError) + internal IDictionary SerializedAdditionalRawData { get; set; } + internal VectorStoreFileAssociation(string fileId, int size, DateTimeOffset createdAt, string vectorStoreId, VectorStoreFileAssociationStatus status, VectorStoreFileAssociationError lastError) { Argument.AssertNotNull(fileId, nameof(fileId)); Argument.AssertNotNull(vectorStoreId, nameof(vectorStoreId)); @@ -24,7 +23,7 @@ internal VectorStoreFileAssociation(string fileId, int size, DateTimeOffset crea LastError = lastError; } - internal VectorStoreFileAssociation(string fileId, InternalVectorStoreFileObjectObject @object, int size, DateTimeOffset createdAt, string vectorStoreId, VectorStoreFileAssociationStatus status, VectorStoreFileAssociationError? lastError, FileChunkingStrategy chunkingStrategy, IDictionary serializedAdditionalRawData) + internal VectorStoreFileAssociation(string fileId, InternalVectorStoreFileObjectObject @object, int size, DateTimeOffset createdAt, string vectorStoreId, VectorStoreFileAssociationStatus status, VectorStoreFileAssociationError lastError, FileChunkingStrategy chunkingStrategy, IDictionary serializedAdditionalRawData) { FileId = fileId; Object = @object; @@ -34,7 +33,7 @@ internal VectorStoreFileAssociation(string fileId, InternalVectorStoreFileObject Status = status; LastError = lastError; ChunkingStrategy = chunkingStrategy; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } internal VectorStoreFileAssociation() @@ -43,6 +42,6 @@ internal VectorStoreFileAssociation() public DateTimeOffset CreatedAt { get; } public string VectorStoreId { get; } public VectorStoreFileAssociationStatus Status { get; } - public VectorStoreFileAssociationError? LastError { get; } + public VectorStoreFileAssociationError LastError { get; } } } diff --git a/src/Generated/Models/VectorStoreFileAssociationError.Serialization.cs b/src/Generated/Models/VectorStoreFileAssociationError.Serialization.cs index ae368bca9..54c786f3a 100644 --- a/src/Generated/Models/VectorStoreFileAssociationError.Serialization.cs +++ b/src/Generated/Models/VectorStoreFileAssociationError.Serialization.cs @@ -10,7 +10,7 @@ namespace OpenAI.VectorStores { - public partial struct VectorStoreFileAssociationError : IJsonModel, IJsonModel + public partial class VectorStoreFileAssociationError : IJsonModel { void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { @@ -21,14 +21,24 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo } writer.WriteStartObject(); - writer.WritePropertyName("code"u8); - writer.WriteStringValue(Code.ToString()); - writer.WritePropertyName("message"u8); - writer.WriteStringValue(Message); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("code") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("code"u8); + writer.WriteStringValue(Code.ToString()); + } + if (SerializedAdditionalRawData?.ContainsKey("message") != true) + { + writer.WritePropertyName("message"u8); + writer.WriteStringValue(Message); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -55,14 +65,14 @@ VectorStoreFileAssociationError IJsonModel.Crea return DeserializeVectorStoreFileAssociationError(document.RootElement, options); } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) => ((IJsonModel)this).Write(writer, options); - - object IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => ((IJsonModel)this).Create(ref reader, options); - internal static VectorStoreFileAssociationError DeserializeVectorStoreFileAssociationError(JsonElement element, ModelReaderWriterOptions options = null) { options ??= ModelSerializationExtensions.WireOptions; + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } VectorStoreFileAssociationErrorCode code = default; string message = default; IDictionary serializedAdditionalRawData = default; @@ -79,8 +89,9 @@ internal static VectorStoreFileAssociationError DeserializeVectorStoreFileAssoci message = property.Value.GetString(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } @@ -119,19 +130,13 @@ VectorStoreFileAssociationError IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => ((IPersistableModel)this).Write(options); - - object IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => ((IPersistableModel)this).Create(data, options); - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => ((IPersistableModel)this).GetFormatFromOptions(options); - internal static VectorStoreFileAssociationError FromResponse(PipelineResponse response) { using var document = JsonDocument.Parse(response.Content); return DeserializeVectorStoreFileAssociationError(document.RootElement); } - internal BinaryContent ToBinaryContent() + internal virtual BinaryContent ToBinaryContent() { return BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Generated/Models/VectorStoreFileAssociationError.cs b/src/Generated/Models/VectorStoreFileAssociationError.cs index 7205de2ee..638e7f527 100644 --- a/src/Generated/Models/VectorStoreFileAssociationError.cs +++ b/src/Generated/Models/VectorStoreFileAssociationError.cs @@ -7,10 +7,9 @@ namespace OpenAI.VectorStores { - public readonly partial struct VectorStoreFileAssociationError + public partial class VectorStoreFileAssociationError { - private readonly IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal VectorStoreFileAssociationError(VectorStoreFileAssociationErrorCode code, string message) { Argument.AssertNotNull(message, nameof(message)); @@ -23,10 +22,10 @@ internal VectorStoreFileAssociationError(VectorStoreFileAssociationErrorCode cod { Code = code; Message = message; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public VectorStoreFileAssociationError() + internal VectorStoreFileAssociationError() { } diff --git a/src/Generated/Models/VectorStoreFileCounts.Serialization.cs b/src/Generated/Models/VectorStoreFileCounts.Serialization.cs index 94870b79c..f3ab33f06 100644 --- a/src/Generated/Models/VectorStoreFileCounts.Serialization.cs +++ b/src/Generated/Models/VectorStoreFileCounts.Serialization.cs @@ -10,7 +10,7 @@ namespace OpenAI.VectorStores { - public partial struct VectorStoreFileCounts : IJsonModel, IJsonModel + public partial class VectorStoreFileCounts : IJsonModel { void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { @@ -21,20 +21,39 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW } writer.WriteStartObject(); - writer.WritePropertyName("in_progress"u8); - writer.WriteNumberValue(InProgress); - writer.WritePropertyName("completed"u8); - writer.WriteNumberValue(Completed); - writer.WritePropertyName("failed"u8); - writer.WriteNumberValue(Failed); - writer.WritePropertyName("cancelled"u8); - writer.WriteNumberValue(Cancelled); - writer.WritePropertyName("total"u8); - writer.WriteNumberValue(Total); - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData?.ContainsKey("in_progress") != true) { - foreach (var item in _serializedAdditionalRawData) + writer.WritePropertyName("in_progress"u8); + writer.WriteNumberValue(InProgress); + } + if (SerializedAdditionalRawData?.ContainsKey("completed") != true) + { + writer.WritePropertyName("completed"u8); + writer.WriteNumberValue(Completed); + } + if (SerializedAdditionalRawData?.ContainsKey("failed") != true) + { + writer.WritePropertyName("failed"u8); + writer.WriteNumberValue(Failed); + } + if (SerializedAdditionalRawData?.ContainsKey("cancelled") != true) + { + writer.WritePropertyName("cancelled"u8); + writer.WriteNumberValue(Cancelled); + } + if (SerializedAdditionalRawData?.ContainsKey("total") != true) + { + writer.WritePropertyName("total"u8); + writer.WriteNumberValue(Total); + } + if (SerializedAdditionalRawData != null) + { + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -61,14 +80,14 @@ VectorStoreFileCounts IJsonModel.Create(ref Utf8JsonReade return DeserializeVectorStoreFileCounts(document.RootElement, options); } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) => ((IJsonModel)this).Write(writer, options); - - object IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => ((IJsonModel)this).Create(ref reader, options); - internal static VectorStoreFileCounts DeserializeVectorStoreFileCounts(JsonElement element, ModelReaderWriterOptions options = null) { options ??= ModelSerializationExtensions.WireOptions; + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } int inProgress = default; int completed = default; int failed = default; @@ -103,8 +122,9 @@ internal static VectorStoreFileCounts DeserializeVectorStoreFileCounts(JsonEleme total = property.Value.GetInt32(); continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } @@ -149,19 +169,13 @@ VectorStoreFileCounts IPersistableModel.Create(BinaryData string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => ((IPersistableModel)this).Write(options); - - object IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => ((IPersistableModel)this).Create(data, options); - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => ((IPersistableModel)this).GetFormatFromOptions(options); - internal static VectorStoreFileCounts FromResponse(PipelineResponse response) { using var document = JsonDocument.Parse(response.Content); return DeserializeVectorStoreFileCounts(document.RootElement); } - internal BinaryContent ToBinaryContent() + internal virtual BinaryContent ToBinaryContent() { return BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Generated/Models/VectorStoreFileCounts.cs b/src/Generated/Models/VectorStoreFileCounts.cs index 16d277c1b..7d35eacce 100644 --- a/src/Generated/Models/VectorStoreFileCounts.cs +++ b/src/Generated/Models/VectorStoreFileCounts.cs @@ -7,10 +7,9 @@ namespace OpenAI.VectorStores { - public readonly partial struct VectorStoreFileCounts + public partial class VectorStoreFileCounts { - private readonly IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } internal VectorStoreFileCounts(int inProgress, int completed, int failed, int cancelled, int total) { InProgress = inProgress; @@ -27,10 +26,10 @@ internal VectorStoreFileCounts(int inProgress, int completed, int failed, int ca Failed = failed; Cancelled = cancelled; Total = total; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public VectorStoreFileCounts() + internal VectorStoreFileCounts() { } diff --git a/src/Generated/Models/VectorStoreModificationOptions.Serialization.cs b/src/Generated/Models/VectorStoreModificationOptions.Serialization.cs index 65b2de005..1474b2a4d 100644 --- a/src/Generated/Models/VectorStoreModificationOptions.Serialization.cs +++ b/src/Generated/Models/VectorStoreModificationOptions.Serialization.cs @@ -21,7 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod } writer.WriteStartObject(); - if (Optional.IsDefined(Name)) + if (SerializedAdditionalRawData?.ContainsKey("name") != true && Optional.IsDefined(Name)) { if (Name != null) { @@ -33,7 +33,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod writer.WriteNull("name"); } } - if (Optional.IsDefined(ExpirationPolicy)) + if (SerializedAdditionalRawData?.ContainsKey("expires_after") != true && Optional.IsDefined(ExpirationPolicy)) { if (ExpirationPolicy != null) { @@ -45,7 +45,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod writer.WriteNull("expires_after"); } } - if (Optional.IsCollectionDefined(Metadata)) + if (SerializedAdditionalRawData?.ContainsKey("metadata") != true && Optional.IsCollectionDefined(Metadata)) { if (Metadata != null) { @@ -63,10 +63,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod writer.WriteNull("metadata"); } } - if (true && _serializedAdditionalRawData != null) + if (SerializedAdditionalRawData != null) { - foreach (var item in _serializedAdditionalRawData) + foreach (var item in SerializedAdditionalRawData) { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } writer.WritePropertyName(item.Key); #if NET6_0_OR_GREATER writer.WriteRawValue(item.Value); @@ -142,8 +146,9 @@ internal static VectorStoreModificationOptions DeserializeVectorStoreModificatio metadata = dictionary; continue; } - if (true) + if (options.Format != "W") { + rawDataDictionary ??= new Dictionary(); rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); } } diff --git a/src/Generated/Models/VectorStoreModificationOptions.cs b/src/Generated/Models/VectorStoreModificationOptions.cs index 068a65f74..8597db68c 100644 --- a/src/Generated/Models/VectorStoreModificationOptions.cs +++ b/src/Generated/Models/VectorStoreModificationOptions.cs @@ -9,8 +9,7 @@ namespace OpenAI.VectorStores { public partial class VectorStoreModificationOptions { - internal IDictionary _serializedAdditionalRawData; - + internal IDictionary SerializedAdditionalRawData { get; set; } public VectorStoreModificationOptions() { Metadata = new ChangeTrackingDictionary(); @@ -21,10 +20,10 @@ internal VectorStoreModificationOptions(string name, VectorStoreExpirationPolicy Name = name; ExpirationPolicy = expirationPolicy; Metadata = metadata; - _serializedAdditionalRawData = serializedAdditionalRawData; + SerializedAdditionalRawData = serializedAdditionalRawData; } - public string Name { get; init; } - public IDictionary Metadata { get; } + public string Name { get; set; } + public IDictionary Metadata { get; set; } } } diff --git a/src/Generated/VectorStoreClient.cs b/src/Generated/VectorStoreClient.cs index 7c40585c4..61cb80aa7 100644 --- a/src/Generated/VectorStoreClient.cs +++ b/src/Generated/VectorStoreClient.cs @@ -31,42 +31,6 @@ internal VectorStoreClient(ClientPipeline pipeline, ApiKeyCredential keyCredenti _endpoint = endpoint; } - public virtual async Task> GetVectorStoreAsync(string vectorStoreId) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - - ClientResult result = await GetVectorStoreAsync(vectorStoreId, null).ConfigureAwait(false); - return ClientResult.FromValue(VectorStore.FromResponse(result.GetRawResponse()), result.GetRawResponse()); - } - - public virtual ClientResult GetVectorStore(string vectorStoreId) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - - ClientResult result = GetVectorStore(vectorStoreId, null); - return ClientResult.FromValue(VectorStore.FromResponse(result.GetRawResponse()), result.GetRawResponse()); - } - - public virtual async Task> ModifyVectorStoreAsync(string vectorStoreId, VectorStoreModificationOptions vectorStore) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNull(vectorStore, nameof(vectorStore)); - - using BinaryContent content = vectorStore.ToBinaryContent(); - ClientResult result = await ModifyVectorStoreAsync(vectorStoreId, content, null).ConfigureAwait(false); - return ClientResult.FromValue(VectorStore.FromResponse(result.GetRawResponse()), result.GetRawResponse()); - } - - public virtual ClientResult ModifyVectorStore(string vectorStoreId, VectorStoreModificationOptions vectorStore) - { - Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNull(vectorStore, nameof(vectorStore)); - - using BinaryContent content = vectorStore.ToBinaryContent(); - ClientResult result = ModifyVectorStore(vectorStoreId, content, null); - return ClientResult.FromValue(VectorStore.FromResponse(result.GetRawResponse()), result.GetRawResponse()); - } - internal PipelineMessage CreateGetVectorStoresRequest(int? limit, string order, string after, string before, RequestOptions options) { var message = _pipeline.CreateMessage(); @@ -276,82 +240,6 @@ internal PipelineMessage CreateCreateVectorStoreFileBatchRequest(string vectorSt return message; } - internal PipelineMessage CreateGetVectorStoreFileBatchRequest(string vectorStoreId, string batchId, RequestOptions options) - { - var message = _pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "GET"; - var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/vector_stores/", false); - uri.AppendPath(vectorStoreId, true); - uri.AppendPath("/file_batches/", false); - uri.AppendPath(batchId, true); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - - internal PipelineMessage CreateCancelVectorStoreFileBatchRequest(string vectorStoreId, string batchId, RequestOptions options) - { - var message = _pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "POST"; - var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/vector_stores/", false); - uri.AppendPath(vectorStoreId, true); - uri.AppendPath("/file_batches/", false); - uri.AppendPath(batchId, true); - uri.AppendPath("/cancel", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - - internal PipelineMessage CreateGetFilesInVectorStoreBatchesRequest(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, RequestOptions options) - { - var message = _pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "GET"; - var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/vector_stores/", false); - uri.AppendPath(vectorStoreId, true); - uri.AppendPath("/file_batches/", false); - uri.AppendPath(batchId, true); - uri.AppendPath("/files", false); - if (limit != null) - { - uri.AppendQuery("limit", limit.Value, true); - } - if (order != null) - { - uri.AppendQuery("order", order, true); - } - if (after != null) - { - uri.AppendQuery("after", after, true); - } - if (before != null) - { - uri.AppendQuery("before", before, true); - } - if (filter != null) - { - uri.AppendQuery("filter", filter, true); - } - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - private static PipelineMessageClassifier _pipelineMessageClassifier200; private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 ??= PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); } diff --git a/src/OpenAI.csproj b/src/OpenAI.csproj index 9cbba7f62..b244f9087 100644 --- a/src/OpenAI.csproj +++ b/src/OpenAI.csproj @@ -5,7 +5,7 @@ OpenAI 2.0.0 - beta.7 + beta.8 netstandard2.0;net6.0 latest @@ -66,11 +66,15 @@ + - + + + + diff --git a/src/To.Be.Generated/BatchOperation.Protocol.cs b/src/To.Be.Generated/BatchOperation.Protocol.cs new file mode 100644 index 000000000..bc0398d15 --- /dev/null +++ b/src/To.Be.Generated/BatchOperation.Protocol.cs @@ -0,0 +1,153 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.Batch; + +// Protocol version +public partial class BatchOperation : OperationResult +{ + private readonly ClientPipeline _pipeline; + private readonly Uri _endpoint; + + private readonly string _batchId; + + private PollingInterval _pollingInterval; + + // For use with protocol methods where the response has been obtained prior + // to creation of the LRO instance. + internal BatchOperation( + ClientPipeline pipeline, + Uri endpoint, + string batchId, + string status, + PipelineResponse response) + : base(response) + { + _pipeline = pipeline; + _endpoint = endpoint; + + _batchId = batchId; + + IsCompleted = GetIsCompleted(status); + + _pollingInterval = new(); + + RehydrationToken = new BatchOperationToken(batchId); + } + + public override ContinuationToken? RehydrationToken { get; protected set; } + + public override bool IsCompleted { get; protected set; } + + // These are replaced when LRO is evolved to have conveniences + public override async Task WaitForCompletionAsync(CancellationToken cancellationToken = default) + { + IAsyncEnumerator enumerator = + new BatchOperationUpdateEnumerator(_pipeline, _endpoint, _batchId, cancellationToken); + + while (await enumerator.MoveNextAsync().ConfigureAwait(false)) + { + ApplyUpdate(enumerator.Current); + + await _pollingInterval.WaitAsync(cancellationToken); + } + } + + public override void WaitForCompletion(CancellationToken cancellationToken = default) + { + IEnumerator enumerator = new BatchOperationUpdateEnumerator( + _pipeline, _endpoint, _batchId, cancellationToken); + + while (enumerator.MoveNext()) + { + ApplyUpdate(enumerator.Current); + + cancellationToken.ThrowIfCancellationRequested(); + + _pollingInterval.Wait(); + } + } + + private void ApplyUpdate(ClientResult result) + { + PipelineResponse response = result.GetRawResponse(); + + using JsonDocument doc = JsonDocument.Parse(response.Content); + string? status = doc.RootElement.GetProperty("status"u8).GetString(); + + IsCompleted = GetIsCompleted(status); + SetRawResponse(response); + } + + private static bool GetIsCompleted(string? status) + { + return status == "completed" || + status == "cancelled" || + status == "expired" || + status == "failed"; + } + + // Generated protocol methods + + /// + /// [Protocol Method] Cancels an in-progress batch. + /// + /// The ID of the batch to cancel. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// is null. + /// is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual async Task CancelBatchAsync(string batchId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); + + using PipelineMessage message = CreateCancelBatchRequest(batchId, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + /// + /// [Protocol Method] Cancels an in-progress batch. + /// + /// The ID of the batch to cancel. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// is null. + /// is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual ClientResult CancelBatch(string batchId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); + + using PipelineMessage message = CreateCancelBatchRequest(batchId, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + internal PipelineMessage CreateCancelBatchRequest(string batchId, RequestOptions options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "POST"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/batches/", false); + uri.AppendPath(batchId, true); + uri.AppendPath("/cancel", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + + private static PipelineMessageClassifier? _pipelineMessageClassifier200; + private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 ??= PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); +} \ No newline at end of file diff --git a/src/To.Be.Generated/BatchOperationToken.cs b/src/To.Be.Generated/BatchOperationToken.cs new file mode 100644 index 000000000..41b3b9a1a --- /dev/null +++ b/src/To.Be.Generated/BatchOperationToken.cs @@ -0,0 +1,90 @@ +using System; +using System.ClientModel; +using System.Diagnostics; +using System.IO; +using System.Text.Json; + +#nullable enable + +namespace OpenAI.Batch; + +internal class BatchOperationToken : ContinuationToken +{ + public BatchOperationToken(string batchId) + { + BatchId = batchId; + } + + public string BatchId { get; } + + public override BinaryData ToBytes() + { + using MemoryStream stream = new(); + using Utf8JsonWriter writer = new(stream); + writer.WriteStartObject(); + + writer.WriteString("batchId", BatchId); + + writer.WriteEndObject(); + + writer.Flush(); + stream.Position = 0; + + return BinaryData.FromStream(stream); + } + + public static BatchOperationToken FromToken(ContinuationToken continuationToken) + { + if (continuationToken is BatchOperationToken token) + { + return token; + } + + BinaryData data = continuationToken.ToBytes(); + + if (data.ToMemory().Length == 0) + { + throw new ArgumentException("Failed to create BatchOperationToken from provided continuationToken.", nameof(continuationToken)); + } + + Utf8JsonReader reader = new(data); + + string batchId = null!; + + reader.Read(); + + Debug.Assert(reader.TokenType == JsonTokenType.StartObject); + + while (reader.Read()) + { + if (reader.TokenType == JsonTokenType.EndObject) + { + break; + } + + Debug.Assert(reader.TokenType == JsonTokenType.PropertyName); + + string propertyName = reader.GetString()!; + + switch (propertyName) + { + case "batchId": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + batchId = reader.GetString()!; + break; + + default: + throw new JsonException($"Unrecognized property '{propertyName}'."); + } + } + + if (batchId is null) + { + throw new ArgumentException("Failed to create BatchOperationToken from provided continuationToken.", nameof(continuationToken)); + } + + return new(batchId); + } +} + diff --git a/src/To.Be.Generated/BatchOperationUpdateEnumerator.Protocol.cs b/src/To.Be.Generated/BatchOperationUpdateEnumerator.Protocol.cs new file mode 100644 index 000000000..ae5680112 --- /dev/null +++ b/src/To.Be.Generated/BatchOperationUpdateEnumerator.Protocol.cs @@ -0,0 +1,165 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections; +using System.Collections.Generic; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.Batch; + +internal partial class BatchOperationUpdateEnumerator : + IAsyncEnumerator, + IEnumerator +{ + private readonly ClientPipeline _pipeline; + private readonly Uri _endpoint; + private readonly CancellationToken _cancellationToken; + + private readonly string _batchId; + + // TODO: does this one need to be nullable? + private ClientResult? _current; + private bool _hasNext = true; + + public BatchOperationUpdateEnumerator( + ClientPipeline pipeline, + Uri endpoint, + string batchId, + CancellationToken cancellationToken) + { + _pipeline = pipeline; + _endpoint = endpoint; + + _batchId = batchId; + + _cancellationToken = cancellationToken; + } + + public ClientResult Current => _current!; + + #region IEnumerator methods + + object IEnumerator.Current => _current!; + + bool IEnumerator.MoveNext() + { + if (!_hasNext) + { + _current = null; + return false; + } + + ClientResult result = GetBatch(_batchId, _cancellationToken.ToRequestOptions()); + + _current = result; + _hasNext = HasNext(result); + + return true; + } + + void IEnumerator.Reset() => _current = null; + + void IDisposable.Dispose() { } + + #endregion + + #region IAsyncEnumerator methods + + ClientResult IAsyncEnumerator.Current => _current!; + + public async ValueTask MoveNextAsync() + { + if (!_hasNext) + { + _current = null; + return false; + } + + ClientResult result = await GetBatchAsync(_batchId, _cancellationToken.ToRequestOptions()).ConfigureAwait(false); + + _current = result; + _hasNext = HasNext(result); + + return true; + } + + // TODO: handle Dispose and DisposeAsync using proper patterns? + ValueTask IAsyncDisposable.DisposeAsync() => default; + + #endregion + + private bool HasNext(ClientResult result) + { + PipelineResponse response = result.GetRawResponse(); + + // TODO: don't parse JsonDocument twice if possible + using JsonDocument doc = JsonDocument.Parse(response.Content); + string? status = doc.RootElement.GetProperty("status"u8).GetString(); + + bool isComplete = status == "completed" || + status == "cancelled" || + status == "expired" || + status == "failed"; + + return !isComplete; + } + + // Generated methods + + /// + /// [Protocol Method] Retrieves a batch. + /// + /// The ID of the batch to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// is null. + /// is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual async Task GetBatchAsync(string batchId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); + + using PipelineMessage message = CreateRetrieveBatchRequest(batchId, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + /// + /// [Protocol Method] Retrieves a batch. + /// + /// The ID of the batch to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// is null. + /// is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual ClientResult GetBatch(string batchId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); + + using PipelineMessage message = CreateRetrieveBatchRequest(batchId, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + internal PipelineMessage CreateRetrieveBatchRequest(string batchId, RequestOptions options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "GET"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/batches/", false); + uri.AppendPath(batchId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + private static PipelineMessageClassifier? _pipelineMessageClassifier200; + private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 ??= PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); +} diff --git a/src/To.Be.Generated/FineTuningOperation.Protocol.cs b/src/To.Be.Generated/FineTuningOperation.Protocol.cs new file mode 100644 index 000000000..c4a6dd84f --- /dev/null +++ b/src/To.Be.Generated/FineTuningOperation.Protocol.cs @@ -0,0 +1,344 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.FineTuning; + +public partial class FineTuningOperation : OperationResult +{ + private readonly ClientPipeline _pipeline; + private readonly Uri _endpoint; + + private readonly string _jobId; + + private PollingInterval _pollingInterval; + + internal FineTuningOperation( + ClientPipeline pipeline, + Uri endpoint, + string jobId, + string status, + PipelineResponse response) : base(response) + { + _pipeline = pipeline; + _endpoint = endpoint; + + _jobId = jobId; + IsCompleted = GetIsCompleted(status); + + _pollingInterval = new(); + + RehydrationToken = new FineTuningOperationToken(jobId); + } + + public override ContinuationToken? RehydrationToken { get; protected set; } + + public override bool IsCompleted { get; protected set; } + + public override async Task WaitForCompletionAsync(CancellationToken cancellationToken = default) + { + IAsyncEnumerator enumerator = new FineTuningOperationUpdateEnumerator( + _pipeline, _endpoint, _jobId, cancellationToken); + + while (await enumerator.MoveNextAsync().ConfigureAwait(false)) + { + ApplyUpdate(enumerator.Current); + + await _pollingInterval.WaitAsync(cancellationToken); + } + } + + public override void WaitForCompletion(CancellationToken cancellationToken = default) + { + IEnumerator enumerator = new FineTuningOperationUpdateEnumerator( + _pipeline, _endpoint, _jobId, cancellationToken); + + while (enumerator.MoveNext()) + { + ApplyUpdate(enumerator.Current); + + cancellationToken.ThrowIfCancellationRequested(); + + _pollingInterval.Wait(); + } + } + + private void ApplyUpdate(ClientResult result) + { + PipelineResponse response = result.GetRawResponse(); + + using JsonDocument doc = JsonDocument.Parse(response.Content); + string? status = doc.RootElement.GetProperty("status"u8).GetString(); + + IsCompleted = GetIsCompleted(status); + SetRawResponse(response); + } + + private static bool GetIsCompleted(string? status) + { + return status == "succeeded" || + status == "failed" || + status == "cancelled"; + } + + // Generated protocol methods + + + // CUSTOM: + // - Renamed. + // - Edited doc comment. + /// + /// [Protocol Method] Get info about a fine-tuning job. + /// + /// [Learn more about fine-tuning](/docs/guides/fine-tuning) + /// + /// The ID of the fine-tuning job. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// is null. + /// is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual async Task GetJobAsync(string jobId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(jobId, nameof(jobId)); + + using PipelineMessage message = CreateRetrieveFineTuningJobRequest(jobId, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + // CUSTOM: + // - Renamed. + // - Edited doc comment. + /// + /// [Protocol Method] Get info about a fine-tuning job. + /// + /// [Learn more about fine-tuning](/docs/guides/fine-tuning) + /// + /// The ID of the fine-tuning job. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// is null. + /// is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual ClientResult GetJob(string jobId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(jobId, nameof(jobId)); + + using PipelineMessage message = CreateRetrieveFineTuningJobRequest(jobId, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + // CUSTOM: + // - Renamed. + // - Edited doc comment. + /// + /// [Protocol Method] Immediately cancel a fine-tune job. + /// + /// The ID of the fine-tuning job to cancel. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// is null. + /// is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual async Task CancelJobAsync(string jobId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(jobId, nameof(jobId)); + + using PipelineMessage message = CreateCancelFineTuningJobRequest(jobId, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + // CUSTOM: + // - Renamed. + // - Edited doc comment. + /// + /// [Protocol Method] Immediately cancel a fine-tune job. + /// + /// The ID of the fine-tuning job to cancel. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// is null. + /// is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual ClientResult CancelJob(string jobId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(jobId, nameof(jobId)); + + using PipelineMessage message = CreateCancelFineTuningJobRequest(jobId, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + // CUSTOM: + // - Renamed. + // - Edited doc comment. + /// + /// [Protocol Method] Get status updates for a fine-tuning job. + /// + /// The ID of the fine-tuning job to get events for. + /// Identifier for the last event from the previous pagination request. + /// Number of events to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// is null. + /// is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual async Task GetJobEventsAsync(string jobId, string after, int? limit, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(jobId, nameof(jobId)); + + using PipelineMessage message = CreateGetFineTuningEventsRequest(jobId, after, limit, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + // CUSTOM: + // - Renamed. + // - Edited doc comment. + /// + /// [Protocol Method] Get status updates for a fine-tuning job. + /// + /// The ID of the fine-tuning job to get events for. + /// Identifier for the last event from the previous pagination request. + /// Number of events to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// is null. + /// is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual ClientResult GetJobEvents(string jobId, string after, int? limit, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(jobId, nameof(jobId)); + + using PipelineMessage message = CreateGetFineTuningEventsRequest(jobId, after, limit, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + /// + /// [Protocol Method] List the checkpoints for a fine-tuning job. + /// + /// The ID of the fine-tuning job to get checkpoints for. + /// Identifier for the last checkpoint ID from the previous pagination request. + /// Number of checkpoints to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// is null. + /// is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual async Task GetJobCheckpointsAsync(string fineTuningJobId, string after, int? limit, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(fineTuningJobId, nameof(fineTuningJobId)); + + using PipelineMessage message = CreateGetFineTuningJobCheckpointsRequest(fineTuningJobId, after, limit, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + /// + /// [Protocol Method] List the checkpoints for a fine-tuning job. + /// + /// The ID of the fine-tuning job to get checkpoints for. + /// Identifier for the last checkpoint ID from the previous pagination request. + /// Number of checkpoints to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// is null. + /// is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual ClientResult GetJobCheckpoints(string fineTuningJobId, string after, int? limit, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(fineTuningJobId, nameof(fineTuningJobId)); + + using PipelineMessage message = CreateGetFineTuningJobCheckpointsRequest(fineTuningJobId, after, limit, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + internal PipelineMessage CreateRetrieveFineTuningJobRequest(string fineTuningJobId, RequestOptions options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "GET"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/fine_tuning/jobs/", false); + uri.AppendPath(fineTuningJobId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal PipelineMessage CreateCancelFineTuningJobRequest(string fineTuningJobId, RequestOptions options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "POST"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/fine_tuning/jobs/", false); + uri.AppendPath(fineTuningJobId, true); + uri.AppendPath("/cancel", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal PipelineMessage CreateGetFineTuningJobCheckpointsRequest(string fineTuningJobId, string after, int? limit, RequestOptions options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "GET"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/fine_tuning/jobs/", false); + uri.AppendPath(fineTuningJobId, true); + uri.AppendPath("/checkpoints", false); + if (after != null) + { + uri.AppendQuery("after", after, true); + } + if (limit != null) + { + uri.AppendQuery("limit", limit.Value, true); + } + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal PipelineMessage CreateGetFineTuningEventsRequest(string fineTuningJobId, string after, int? limit, RequestOptions options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "GET"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/fine_tuning/jobs/", false); + uri.AppendPath(fineTuningJobId, true); + uri.AppendPath("/events", false); + if (after != null) + { + uri.AppendQuery("after", after, true); + } + if (limit != null) + { + uri.AppendQuery("limit", limit.Value, true); + } + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + private static PipelineMessageClassifier? _pipelineMessageClassifier200; + private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 ??= PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); +} diff --git a/src/To.Be.Generated/FineTuningOperationToken.cs b/src/To.Be.Generated/FineTuningOperationToken.cs new file mode 100644 index 000000000..a2f131d3d --- /dev/null +++ b/src/To.Be.Generated/FineTuningOperationToken.cs @@ -0,0 +1,91 @@ +using System; +using System.ClientModel; +using System.Diagnostics; +using System.IO; +using System.Text.Json; + +#nullable enable + +namespace OpenAI.FineTuning; + +internal class FineTuningOperationToken : ContinuationToken +{ + public FineTuningOperationToken(string jobId) + { + JobId = jobId; + } + + public string JobId { get; } + + public override BinaryData ToBytes() + { + using MemoryStream stream = new(); + using Utf8JsonWriter writer = new(stream); + + writer.WriteStartObject(); + + writer.WriteString("jobId", JobId); + + writer.WriteEndObject(); + + writer.Flush(); + stream.Position = 0; + + return BinaryData.FromStream(stream); + } + + public static FineTuningOperationToken FromToken(ContinuationToken continuationToken) + { + if (continuationToken is FineTuningOperationToken token) + { + return token; + } + + BinaryData data = continuationToken.ToBytes(); + + if (data.ToMemory().Length == 0) + { + throw new ArgumentException("Failed to create FineTuningOperationToken from provided continuationToken.", nameof(continuationToken)); + } + + Utf8JsonReader reader = new(data); + + string jobId = null!; + + reader.Read(); + + Debug.Assert(reader.TokenType == JsonTokenType.StartObject); + + while (reader.Read()) + { + if (reader.TokenType == JsonTokenType.EndObject) + { + break; + } + + Debug.Assert(reader.TokenType == JsonTokenType.PropertyName); + + string propertyName = reader.GetString()!; + + switch (propertyName) + { + case "jobId": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + jobId = reader.GetString()!; + break; + + default: + throw new JsonException($"Unrecognized property '{propertyName}'."); + } + } + + if (jobId is null) + { + throw new ArgumentException("Failed to create RunOperationToken from provided continuationToken.", nameof(continuationToken)); + } + + return new(jobId); + } +} + diff --git a/src/To.Be.Generated/FineTuningOperationUpdateEnumerator.Protocol.cs b/src/To.Be.Generated/FineTuningOperationUpdateEnumerator.Protocol.cs new file mode 100644 index 000000000..29d75f8ee --- /dev/null +++ b/src/To.Be.Generated/FineTuningOperationUpdateEnumerator.Protocol.cs @@ -0,0 +1,170 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections; +using System.Collections.Generic; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.FineTuning; + +internal partial class FineTuningOperationUpdateEnumerator : + IAsyncEnumerator, + IEnumerator +{ + private readonly ClientPipeline _pipeline; + private readonly Uri _endpoint; + private readonly CancellationToken _cancellationToken; + + private readonly string _jobId; + + private ClientResult? _current; + private bool _hasNext = true; + + public FineTuningOperationUpdateEnumerator( + ClientPipeline pipeline, + Uri endpoint, + string jobId, + CancellationToken cancellationToken) + { + _pipeline = pipeline; + _endpoint = endpoint; + + _jobId = jobId; + + _cancellationToken = cancellationToken; + } + + public ClientResult Current => _current!; + + #region IEnumerator methods + + object IEnumerator.Current => _current!; + + bool IEnumerator.MoveNext() + { + if (!_hasNext) + { + _current = null; + return false; + } + + ClientResult result = GetJob(_jobId, _cancellationToken.ToRequestOptions()); + + _current = result; + _hasNext = HasNext(result); + + return true; + } + + void IEnumerator.Reset() => _current = null; + + void IDisposable.Dispose() { } + + #endregion + + #region IAsyncEnumerator methods + + ClientResult IAsyncEnumerator.Current => _current!; + + public async ValueTask MoveNextAsync() + { + if (!_hasNext) + { + _current = null; + return false; + } + + ClientResult result = await GetJobAsync(_jobId, _cancellationToken.ToRequestOptions()).ConfigureAwait(false); + + _current = result; + _hasNext = HasNext(result); + + return true; + } + + // TODO: handle Dispose and DisposeAsync using proper patterns? + ValueTask IAsyncDisposable.DisposeAsync() => default; + + #endregion + + private bool HasNext(ClientResult result) + { + PipelineResponse response = result.GetRawResponse(); + + // TODO: don't parse JsonDocument twice if possible + using JsonDocument doc = JsonDocument.Parse(response.Content); + string? status = doc.RootElement.GetProperty("status"u8).GetString(); + + bool isComplete = status == "succeeded" || + status == "failed" || + status == "cancelled"; + + return !isComplete; + } + + // Generated methods + + /// + /// [Protocol Method] Get info about a fine-tuning job. + /// + /// [Learn more about fine-tuning](/docs/guides/fine-tuning) + /// + /// The ID of the fine-tuning job. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// is null. + /// is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual async Task GetJobAsync(string jobId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(jobId, nameof(jobId)); + + using PipelineMessage message = CreateRetrieveFineTuningJobRequest(jobId, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + // CUSTOM: + // - Renamed. + // - Edited doc comment. + /// + /// [Protocol Method] Get info about a fine-tuning job. + /// + /// [Learn more about fine-tuning](/docs/guides/fine-tuning) + /// + /// The ID of the fine-tuning job. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// is null. + /// is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual ClientResult GetJob(string jobId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(jobId, nameof(jobId)); + + using PipelineMessage message = CreateRetrieveFineTuningJobRequest(jobId, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + internal PipelineMessage CreateRetrieveFineTuningJobRequest(string fineTuningJobId, RequestOptions options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "GET"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/fine_tuning/jobs/", false); + uri.AppendPath(fineTuningJobId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + private static PipelineMessageClassifier? _pipelineMessageClassifier200; + private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 ??= PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); +} diff --git a/src/To.Be.Generated/Internal/PollingInterval.cs b/src/To.Be.Generated/Internal/PollingInterval.cs new file mode 100644 index 000000000..d159aabd7 --- /dev/null +++ b/src/To.Be.Generated/Internal/PollingInterval.cs @@ -0,0 +1,29 @@ +using System; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI; + +internal class PollingInterval +{ + private const int DefaultWaitMilliseconds = 1000; + + private readonly TimeSpan _interval; + + public PollingInterval(TimeSpan? interval = default) + { + _interval = interval ?? new TimeSpan(DefaultWaitMilliseconds); + } + + public async Task WaitAsync(CancellationToken cancellationToken) + { + await Task.Delay(_interval, cancellationToken); + } + + public void Wait() + { + Thread.Sleep(_interval); + } +} diff --git a/src/To.Be.Generated/RunOperation.Protocol.cs b/src/To.Be.Generated/RunOperation.Protocol.cs new file mode 100644 index 000000000..5d9b6c0eb --- /dev/null +++ b/src/To.Be.Generated/RunOperation.Protocol.cs @@ -0,0 +1,639 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text.Json; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.Assistants; + +// Protocol version +public partial class RunOperation : ClientResult +{ + private readonly ClientPipeline _pipeline; + private readonly Uri _endpoint; + + private string? _threadId; + private string? _runId; + private string? _status; + + private bool _isCompleted; + + private PollingInterval? _pollingInterval; + + // For use with protocol methods where the response has been obtained prior + // to creation of the LRO instance. + internal RunOperation( + ClientPipeline pipeline, + Uri endpoint, + PipelineResponse response) + : base(response) + { + _pipeline = pipeline; + _endpoint = endpoint; + + // Protocol method was called with stream=true option. + bool isStreaming = + response.Headers.TryGetValue("Content-Type", out string? contentType) && + contentType == "text/event-stream; charset=utf-8"; + + if (!isStreaming) + { + _pollingInterval = new(); + + using JsonDocument doc = JsonDocument.Parse(response.Content); + + _status = doc.RootElement.GetProperty("status"u8).GetString(); + _threadId = doc.RootElement.GetProperty("thread_id"u8).GetString(); + _runId = doc.RootElement.GetProperty("id"u8).GetString(); + + if (_status is null || _threadId is null || _runId is null) + { + throw new ArgumentException("Invalid 'response' body.", nameof(response)); + } + + IsCompleted = GetIsCompleted(_status!); + } + } + + #region OperationResult methods + + public virtual bool IsCompleted + { + get + { + // We need this check in the protocol/streaming case. + if (IsStreaming) + { + throw new NotSupportedException("Cannot obtain operation status from streaming operation."); + } + + return _isCompleted; + } + + protected set => _isCompleted = value; + } + + public virtual ContinuationToken? RehydrationToken { get; protected set; } + + internal bool IsStreaming => _pollingInterval == null; + + // Note: these work for protocol-only. + // Once convenience overloads available, these get replaced by those implementations. + + //public override Task WaitAsync(CancellationToken cancellationToken = default) + //{ + // if (_isStreaming) + // { + // // We would have to read from the stream to get the run ID to poll for. + // throw new NotSupportedException("Cannot poll for status updates from streaming operation."); + // } + + // // See: https://platform.openai.com/docs/assistants/how-it-works/polling-for-updates + + // IAsyncEnumerator enumerator = GetUpdateResultEnumeratorAsync(); + + // await while (await enumerator.MoveNextAsync().ConfigureAwait(false)) + // { + // ApplyUpdate(enumerator.Current); + + // // Don't keep polling if would do so infinitely. + // if (_status == "requires_action") + // { + // return; + // } + + // cancellationToken.ThrowIfCancellationRequested(); + + // await _pollingInterval.WaitAsync().ConfigureAwait(); + // } + //} + + //public override void Wait(CancellationToken cancellationToken = default) + //{ + // if (_isStreaming) + // { + // // We would have to read from the stream to get the run ID to poll for. + // throw new NotSupportedException("Cannot poll for status updates from streaming operation."); + // } + + // // See: https://platform.openai.com/docs/assistants/how-it-works/polling-for-updates + + // IEnumerator enumerator = GetUpdateResultEnumerator(); + + // while (enumerator.MoveNext()) + // { + // ApplyUpdate(enumerator.Current); + + // // Don't keep polling if would do so infinitely. + // if (_status == "requires_action") + // { + // return; + // } + + // cancellationToken.ThrowIfCancellationRequested(); + + // _pollingInterval.Wait(); + // } + //} + + //private void ApplyUpdate(ClientResult result) + //{ + // PipelineResponse response = result.GetRawResponse(); + + // using JsonDocument doc = JsonDocument.Parse(response.Content); + // _status = doc.RootElement.GetProperty("status"u8).GetString(); + + // IsCompleted = GetIsCompleted(_status!); + // SetRawResponse(response); + //} + + private static bool GetIsCompleted(string status) + { + bool hasCompleted = + status == "expired" || + status == "completed" || + status == "failed" || + status == "incomplete" || + status == "cancelled"; + + return hasCompleted; + } + + #endregion + + #region Generated protocol methods - i.e. TypeSpec "linked operations" + + /// + /// [Protocol Method] Retrieves a run. + /// + /// The ID of the [thread](/docs/api-reference/threads) that was run. + /// The ID of the run to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task GetRunAsync(string threadId, string runId, RequestOptions? options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + + using PipelineMessage message = CreateGetRunRequest(threadId, runId, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + /// + /// [Protocol Method] Retrieves a run. + /// + /// The ID of the [thread](/docs/api-reference/threads) that was run. + /// The ID of the run to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetRun(string threadId, string runId, RequestOptions? options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + + using PipelineMessage message = CreateGetRunRequest(threadId, runId, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + /// + /// [Protocol Method] Modifies a run. + /// + /// The ID of the [thread](/docs/api-reference/threads) that was run. + /// The ID of the run to modify. + /// The content to send as the body of the request. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// , or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task ModifyRunAsync(string threadId, string runId, BinaryContent content, RequestOptions? options = null) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateModifyRunRequest(threadId, runId, content, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + /// + /// [Protocol Method] Modifies a run. + /// + /// The ID of the [thread](/docs/api-reference/threads) that was run. + /// The ID of the run to modify. + /// The content to send as the body of the request. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// , or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult ModifyRun(string threadId, string runId, BinaryContent content, RequestOptions? options = null) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateModifyRunRequest(threadId, runId, content, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + /// + /// [Protocol Method] Cancels a run that is `in_progress`. + /// + /// The ID of the thread to which this run belongs. + /// The ID of the run to cancel. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task CancelRunAsync(string threadId, string runId, RequestOptions? options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + + using PipelineMessage message = CreateCancelRunRequest(threadId, runId, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + /// + /// [Protocol Method] Cancels a run that is `in_progress`. + /// + /// The ID of the thread to which this run belongs. + /// The ID of the run to cancel. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult CancelRun(string threadId, string runId, RequestOptions? options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + + using PipelineMessage message = CreateCancelRunRequest(threadId, runId, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + /// + /// [Protocol Method] When a run has the `status: "requires_action"` and `required_action.type` is + /// `submit_tool_outputs`, this endpoint can be used to submit the outputs from the tool calls once + /// they're all completed. All outputs must be submitted in a single request. + /// + /// The ID of the [thread](/docs/api-reference/threads) to which this run belongs. + /// The ID of the run that requires the tool output submission. + /// The content to send as the body of the request. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// , or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task SubmitToolOutputsToRunAsync(string threadId, string runId, BinaryContent content, RequestOptions? options = null) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + Argument.AssertNotNull(content, nameof(content)); + + PipelineMessage? message = null; + try + { + message = CreateSubmitToolOutputsToRunRequest(threadId, runId, content, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + finally + { + if (options?.BufferResponse != false) + { + message?.Dispose(); + } + } + } + + /// + /// [Protocol Method] When a run has the `status: "requires_action"` and `required_action.type` is + /// `submit_tool_outputs`, this endpoint can be used to submit the outputs from the tool calls once + /// they're all completed. All outputs must be submitted in a single request. + /// + /// The ID of the [thread](/docs/api-reference/threads) to which this run belongs. + /// The ID of the run that requires the tool output submission. + /// The content to send as the body of the request. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// , or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult SubmitToolOutputsToRun(string threadId, string runId, BinaryContent content, RequestOptions? options = null) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + Argument.AssertNotNull(content, nameof(content)); + + PipelineMessage? message = null; + try + { + message = CreateSubmitToolOutputsToRunRequest(threadId, runId, content, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + finally + { + if (options?.BufferResponse != false) + { + message?.Dispose(); + } + } + } + + /// + /// [Protocol Method] Returns a paginated collection of run steps belonging to a run. + /// + /// The ID of the thread the run and run steps belong to. + /// The ID of the run the run steps belong to. + /// + /// A limit on the number of objects to be returned. Limit can range between 1 and 100, and the + /// default is 20. + /// + /// + /// Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and`desc` + /// for descending order. Allowed values: "asc" | "desc" + /// + /// + /// A cursor for use in pagination. `after` is an object ID that defines your place in the list. + /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your + /// subsequent call can include after=obj_foo in order to fetch the next page of the list. + /// + /// + /// A cursor for use in pagination. `before` is an object ID that defines your place in the list. + /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your + /// subsequent call can include before=obj_foo in order to fetch the previous page of the list. + /// + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// A collection of service responses, each holding a page of values. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual IAsyncEnumerable GetRunStepsAsync(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + + RunStepsPageEnumerator enumerator = new RunStepsPageEnumerator(_pipeline, _endpoint, threadId, runId, limit, order, after, before, options); + return PageCollectionHelpers.CreateAsync(enumerator); + } + + /// + /// [Protocol Method] Returns a paginated collection of run steps belonging to a run. + /// + /// The ID of the thread the run and run steps belong to. + /// The ID of the run the run steps belong to. + /// + /// A limit on the number of objects to be returned. Limit can range between 1 and 100, and the + /// default is 20. + /// + /// + /// Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and`desc` + /// for descending order. Allowed values: "asc" | "desc" + /// + /// + /// A cursor for use in pagination. `after` is an object ID that defines your place in the list. + /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your + /// subsequent call can include after=obj_foo in order to fetch the next page of the list. + /// + /// + /// A cursor for use in pagination. `before` is an object ID that defines your place in the list. + /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your + /// subsequent call can include before=obj_foo in order to fetch the previous page of the list. + /// + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// A collection of service responses, each holding a page of values. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual IEnumerable GetRunSteps(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + + RunStepsPageEnumerator enumerator = new RunStepsPageEnumerator(_pipeline, _endpoint, threadId, runId, limit, order, after, before, options); + return PageCollectionHelpers.Create(enumerator); + } + + /// + /// [Protocol Method] Retrieves a run step. + /// + /// The ID of the thread to which the run and run step belongs. + /// The ID of the run to which the run step belongs. + /// The ID of the run step to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// , or is null. + /// , or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task GetRunStepAsync(string threadId, string runId, string stepId, RequestOptions? options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + Argument.AssertNotNullOrEmpty(stepId, nameof(stepId)); + + using PipelineMessage message = CreateGetRunStepRequest(threadId, runId, stepId, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + /// + /// [Protocol Method] Retrieves a run step. + /// + /// The ID of the thread to which the run and run step belongs. + /// The ID of the run to which the run step belongs. + /// The ID of the run step to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// , or is null. + /// , or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetRunStep(string threadId, string runId, string stepId, RequestOptions? options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + Argument.AssertNotNullOrEmpty(stepId, nameof(stepId)); + + using PipelineMessage message = CreateGetRunStepRequest(threadId, runId, stepId, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + internal PipelineMessage CreateCreateRunRequest(string threadId, BinaryContent content, RequestOptions? options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "POST"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/threads/", false); + uri.AppendPath(threadId, true); + uri.AppendPath("/runs", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + request.Headers.Set("Content-Type", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + + internal PipelineMessage CreateGetRunRequest(string threadId, string runId, RequestOptions? options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "GET"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/threads/", false); + uri.AppendPath(threadId, true); + uri.AppendPath("/runs/", false); + uri.AppendPath(runId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal PipelineMessage CreateModifyRunRequest(string threadId, string runId, BinaryContent content, RequestOptions? options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "POST"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/threads/", false); + uri.AppendPath(threadId, true); + uri.AppendPath("/runs/", false); + uri.AppendPath(runId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + request.Headers.Set("Content-Type", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + + internal PipelineMessage CreateCancelRunRequest(string threadId, string runId, RequestOptions? options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "POST"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/threads/", false); + uri.AppendPath(threadId, true); + uri.AppendPath("/runs/", false); + uri.AppendPath(runId, true); + uri.AppendPath("/cancel", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal PipelineMessage CreateSubmitToolOutputsToRunRequest(string threadId, string runId, BinaryContent content, RequestOptions? options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "POST"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/threads/", false); + uri.AppendPath(threadId, true); + uri.AppendPath("/runs/", false); + uri.AppendPath(runId, true); + uri.AppendPath("/submit_tool_outputs", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + request.Headers.Set("Content-Type", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + + internal PipelineMessage CreateGetRunStepsRequest(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions? options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "GET"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/threads/", false); + uri.AppendPath(threadId, true); + uri.AppendPath("/runs/", false); + uri.AppendPath(runId, true); + uri.AppendPath("/steps", false); + if (limit != null) + { + uri.AppendQuery("limit", limit.Value, true); + } + if (order != null) + { + uri.AppendQuery("order", order, true); + } + if (after != null) + { + uri.AppendQuery("after", after, true); + } + if (before != null) + { + uri.AppendQuery("before", before, true); + } + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal PipelineMessage CreateGetRunStepRequest(string threadId, string runId, string stepId, RequestOptions? options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "GET"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/threads/", false); + uri.AppendPath(threadId, true); + uri.AppendPath("/runs/", false); + uri.AppendPath(runId, true); + uri.AppendPath("/steps/", false); + uri.AppendPath(stepId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + private static PipelineMessageClassifier? _pipelineMessageClassifier200; + private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 ??= PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); + #endregion +} \ No newline at end of file diff --git a/src/To.Be.Generated/RunOperation.cs b/src/To.Be.Generated/RunOperation.cs new file mode 100644 index 000000000..e2c534306 --- /dev/null +++ b/src/To.Be.Generated/RunOperation.cs @@ -0,0 +1,392 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.Assistants; + +// Convenience version +public partial class RunOperation : ClientResult +{ + // For use with polling convenience methods where the response has been + // obtained prior to creation of the LRO type. + internal RunOperation( + ClientPipeline pipeline, + Uri endpoint, + ThreadRun value, + RunStatus status, + PipelineResponse response) + : base(response) + { + _pipeline = pipeline; + _endpoint = endpoint; + _pollingInterval = new(); + + if (response.Headers.TryGetValue("Content-Type", out string? contentType) && + contentType == "text/event-stream; charset=utf-8") + { + throw new ArgumentException("Cannot create polling operation from streaming response.", nameof(response)); + } + + Value = value; + Status = status; + + ThreadId = value.ThreadId; + RunId = value.Id; + + RehydrationToken = new RunOperationToken(value.ThreadId, value.Id); + } + + // For use with streaming convenience methods - response hasn't been provided yet. + internal RunOperation( + ClientPipeline pipeline, + Uri endpoint) + : base() + { + _pipeline = pipeline; + _endpoint = endpoint; + + // This constructor is provided for streaming convenience method only. + // Because of this, we don't set the polling interval type. + } + + // Note: these all have to be nullable because the derived streaming type + // cannot set them until it reads the first event from the SSE stream. + public string? RunId { get => _runId; protected set => _runId = value; } + public string? ThreadId { get => _threadId; protected set => _threadId = value; } + + public ThreadRun? Value { get; protected set; } + public RunStatus? Status { get; protected set; } + + #region OperationResult methods + + public virtual async Task WaitUntilStoppedAsync(CancellationToken cancellationToken = default) + => await WaitUntilStoppedAsync(default, cancellationToken).ConfigureAwait(false); + + public virtual void WaitUntilStopped(CancellationToken cancellationToken = default) + => WaitUntilStopped(default, cancellationToken); + + public virtual async Task WaitUntilStoppedAsync(TimeSpan? pollingInterval, CancellationToken cancellationToken = default) + { + if (IsStreaming) + { + // We would have to read from the stream to get the run ID to poll for. + throw new NotSupportedException("Cannot poll for status updates from streaming operation."); + } + + await foreach (ThreadRun update in GetUpdatesAsync(pollingInterval, cancellationToken)) + { + // Don't keep polling if would do so infinitely. + if (update.Status == RunStatus.RequiresAction) + { + return; + } + } + } + + public virtual void WaitUntilStopped(TimeSpan? pollingInterval, CancellationToken cancellationToken = default) + { + if (IsStreaming) + { + // We would have to read from the stream to get the run ID to poll for. + throw new NotSupportedException("Cannot poll for status updates from streaming operation."); + } + + foreach (ThreadRun update in GetUpdates(pollingInterval, cancellationToken)) + { + // Don't keep polling if would do so infinitely. + if (update.Status == RunStatus.RequiresAction) + { + return; + } + } + } + + // Expose enumerable APIs similar to the streaming ones. + public virtual async IAsyncEnumerable GetUpdatesAsync( + TimeSpan? pollingInterval = default, + [EnumeratorCancellation] CancellationToken cancellationToken = default) + { + if (pollingInterval is not null) + { + // TODO: don't allocate + _pollingInterval = new PollingInterval(pollingInterval); + } + + IAsyncEnumerator> enumerator = + new RunOperationUpdateEnumerator(_pipeline, _endpoint, _threadId!, _runId!, cancellationToken); + + while (await enumerator.MoveNextAsync().ConfigureAwait(false)) + { + ApplyUpdate(enumerator.Current); + + yield return enumerator.Current; + + // TODO: do we need null check? + await _pollingInterval!.WaitAsync(cancellationToken).ConfigureAwait(false); + } + } + + public virtual IEnumerable GetUpdates( + TimeSpan? pollingInterval = default, + CancellationToken cancellationToken = default) + { + if (pollingInterval is not null) + { + // TODO: don't allocate + _pollingInterval = new PollingInterval(pollingInterval); + } + + IEnumerator> enumerator = new RunOperationUpdateEnumerator( + _pipeline, _endpoint, _threadId!, _runId!, cancellationToken); + + while (enumerator.MoveNext()) + { + ApplyUpdate(enumerator.Current); + + yield return enumerator.Current; + + // TODO: do we need null check? + _pollingInterval!.Wait(); + } + } + + private void ApplyUpdate(ClientResult update) + { + Value = update; + Status = update.Value.Status; + IsCompleted = Status.Value.IsTerminal; + + SetRawResponse(update.GetRawResponse()); + } + + #endregion + + #region Convenience overloads of generated protocol methods + + /// + /// Gets an existing from a known . + /// + /// A token that can be used to cancel this method call. + /// The existing instance. + public virtual async Task> GetRunAsync(CancellationToken cancellationToken = default) + { + ClientResult protocolResult = await GetRunAsync(_threadId!, _runId!, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + return CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); + } + + /// + /// Gets an existing from a known . + /// + /// A token that can be used to cancel this method call. + /// The existing instance. + public virtual ClientResult GetRun(CancellationToken cancellationToken = default) + { + ClientResult protocolResult = GetRun(_threadId!, _runId!, cancellationToken.ToRequestOptions()); + return CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); + } + + /// + /// Cancels an in-progress . + /// + /// A token that can be used to cancel this method call. + /// An updated instance, reflecting the new status of the run. + public virtual async Task> CancelRunAsync(CancellationToken cancellationToken = default) + { + ClientResult protocolResult = await CancelRunAsync(_threadId!, _runId!, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + return CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); + } + + /// + /// Cancels an in-progress . + /// + /// A token that can be used to cancel this method call. + /// An updated instance, reflecting the new status of the run. + public virtual ClientResult CancelRun(CancellationToken cancellationToken = default) + { + ClientResult protocolResult = CancelRun(_threadId!, _runId!, cancellationToken.ToRequestOptions()); + return CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); + } + + /// + /// Submits a collection of required tool call outputs to a run and resumes the run. + /// + /// + /// The tool outputs, corresponding to instances from the run. + /// + /// A token that can be used to cancel this method call. + /// The , updated after the submission was processed. + public virtual async Task SubmitToolOutputsToRunAsync( + IEnumerable toolOutputs, + CancellationToken cancellationToken = default) + { + BinaryContent content = new InternalSubmitToolOutputsRunRequest(toolOutputs).ToBinaryContent(); + ClientResult protocolResult = await SubmitToolOutputsToRunAsync(_threadId!, _runId!, content, cancellationToken.ToRequestOptions()) + .ConfigureAwait(false); + ClientResult update = CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); + ApplyUpdate(update); + } + + /// + /// Submits a collection of required tool call outputs to a run and resumes the run. + /// + /// + /// The tool outputs, corresponding to instances from the run. + /// + /// A token that can be used to cancel this method call. + /// The , updated after the submission was processed. + public virtual void SubmitToolOutputsToRun( + IEnumerable toolOutputs, + CancellationToken cancellationToken = default) + { + BinaryContent content = new InternalSubmitToolOutputsRunRequest(toolOutputs).ToBinaryContent(); + ClientResult protocolResult = SubmitToolOutputsToRun(_threadId!, _runId!, content, cancellationToken.ToRequestOptions()); + ClientResult update = CreateResultFromProtocol(protocolResult, ThreadRun.FromResponse); + ApplyUpdate(update); + } + + /// + /// Gets a page collection holding instances associated with a . + /// + /// + /// A token that can be used to cancel this method call. + /// holds pages of values. To obtain a collection of values, call + /// . To obtain the current + /// page of values, call . + /// A collection of pages of . + public virtual AsyncPageCollection GetRunStepsAsync( + RunStepCollectionOptions? options = default, + CancellationToken cancellationToken = default) + { + RunStepsPageEnumerator enumerator = new(_pipeline, _endpoint, + _threadId!, + _runId!, + options?.PageSize, + options?.Order?.ToString(), + options?.AfterId, + options?.BeforeId, + cancellationToken.ToRequestOptions()); + + return PageCollectionHelpers.CreateAsync(enumerator); + } + + /// + /// Rehydrates a page collection holding instances from a page token. + /// + /// Page token corresponding to the first page of the collection to rehydrate. + /// A token that can be used to cancel this method call. + /// holds pages of values. To obtain a collection of values, call + /// . To obtain the current + /// page of values, call . + /// A collection of pages of . + public virtual AsyncPageCollection GetRunStepsAsync( + ContinuationToken firstPageToken, + CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(firstPageToken, nameof(firstPageToken)); + + RunStepsPageToken pageToken = RunStepsPageToken.FromToken(firstPageToken); + RunStepsPageEnumerator enumerator = new(_pipeline, _endpoint, + pageToken.ThreadId, + pageToken.RunId, + pageToken.Limit, + pageToken.Order, + pageToken.After, + pageToken.Before, + cancellationToken.ToRequestOptions()); + + return PageCollectionHelpers.CreateAsync(enumerator); + } + + /// + /// Gets a page collection holding instances associated with a . + /// + /// + /// A token that can be used to cancel this method call. + /// holds pages of values. To obtain a collection of values, call + /// . To obtain the current + /// page of values, call . + /// A collection of pages of . + public virtual PageCollection GetRunSteps( + RunStepCollectionOptions? options = default, + CancellationToken cancellationToken = default) + { + RunStepsPageEnumerator enumerator = new(_pipeline, _endpoint, + ThreadId!, + RunId!, + options?.PageSize, + options?.Order?.ToString(), + options?.AfterId, + options?.BeforeId, + cancellationToken.ToRequestOptions()); + + return PageCollectionHelpers.Create(enumerator); + } + + /// + /// Rehydrates a page collection holding instances from a page token. + /// + /// Page token corresponding to the first page of the collection to rehydrate. + /// A token that can be used to cancel this method call. + /// holds pages of values. To obtain a collection of values, call + /// . To obtain the current + /// page of values, call . + /// A collection of pages of . + public virtual PageCollection GetRunSteps( + ContinuationToken firstPageToken, + CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(firstPageToken, nameof(firstPageToken)); + + RunStepsPageToken pageToken = RunStepsPageToken.FromToken(firstPageToken); + RunStepsPageEnumerator enumerator = new(_pipeline, _endpoint, + pageToken.ThreadId, + pageToken.RunId, + pageToken.Limit, + pageToken.Order, + pageToken.After, + pageToken.Before, + cancellationToken.ToRequestOptions()); + + return PageCollectionHelpers.Create(enumerator); + } + + /// + /// Gets a single run step from a run. + /// + /// The ID of the run step. + /// A token that can be used to cancel this method call. + /// A instance corresponding to the specified step. + public virtual async Task> GetRunStepAsync(string stepId, CancellationToken cancellationToken = default) + { + ClientResult protocolResult = await GetRunStepAsync(_threadId!, _runId!, stepId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + return CreateResultFromProtocol(protocolResult, RunStep.FromResponse); + } + + /// + /// Gets a single run step from a run. + /// + /// The ID of the run step. + /// A token that can be used to cancel this method call. + /// A instance corresponding to the specified step. + public virtual ClientResult GetRunStep(string stepId, CancellationToken cancellationToken = default) + { + ClientResult protocolResult = GetRunStep(_threadId!, _runId!, stepId, cancellationToken.ToRequestOptions()); + return CreateResultFromProtocol(protocolResult, RunStep.FromResponse); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static ClientResult CreateResultFromProtocol(ClientResult protocolResult, Func responseDeserializer) + { + PipelineResponse pipelineResponse = protocolResult.GetRawResponse(); + T deserializedResultValue = responseDeserializer.Invoke(pipelineResponse); + return ClientResult.FromValue(deserializedResultValue, pipelineResponse); + } + + #endregion +} \ No newline at end of file diff --git a/src/To.Be.Generated/RunOperationToken.cs b/src/To.Be.Generated/RunOperationToken.cs new file mode 100644 index 000000000..b57dec159 --- /dev/null +++ b/src/To.Be.Generated/RunOperationToken.cs @@ -0,0 +1,102 @@ +using System; +using System.ClientModel; +using System.Diagnostics; +using System.IO; +using System.Text.Json; + +#nullable enable + +namespace OpenAI.Assistants; + +internal class RunOperationToken : ContinuationToken +{ + public RunOperationToken(string threadId, string runId) + { + ThreadId = threadId; + RunId = runId; + } + + public string ThreadId { get; } + + public string RunId { get; } + + public override BinaryData ToBytes() + { + using MemoryStream stream = new(); + using Utf8JsonWriter writer = new(stream); + + writer.WriteStartObject(); + + writer.WriteString("threadId", ThreadId); + writer.WriteString("runId", RunId); + + writer.WriteEndObject(); + + writer.Flush(); + stream.Position = 0; + + return BinaryData.FromStream(stream); + } + + public static RunOperationToken FromToken(ContinuationToken continuationToken) + { + if (continuationToken is RunOperationToken token) + { + return token; + } + + BinaryData data = continuationToken.ToBytes(); + + if (data.ToMemory().Length == 0) + { + throw new ArgumentException("Failed to create RunOperationToken from provided continuationToken.", nameof(continuationToken)); + } + + Utf8JsonReader reader = new(data); + + string threadId = null!; + string runId = null!; + + reader.Read(); + + Debug.Assert(reader.TokenType == JsonTokenType.StartObject); + + while (reader.Read()) + { + if (reader.TokenType == JsonTokenType.EndObject) + { + break; + } + + Debug.Assert(reader.TokenType == JsonTokenType.PropertyName); + + string propertyName = reader.GetString()!; + + switch (propertyName) + { + case "threadId": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + threadId = reader.GetString()!; + break; + + case "runId": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + threadId = reader.GetString()!; + break; + + default: + throw new JsonException($"Unrecognized property '{propertyName}'."); + } + } + + if (threadId is null || runId is null) + { + throw new ArgumentException("Failed to create RunOperationToken from provided continuationToken.", nameof(continuationToken)); + } + + return new(threadId, runId); + } +} + diff --git a/src/To.Be.Generated/RunOperationUpdateEnumerator.Protocol.cs b/src/To.Be.Generated/RunOperationUpdateEnumerator.Protocol.cs new file mode 100644 index 000000000..3185d0b0a --- /dev/null +++ b/src/To.Be.Generated/RunOperationUpdateEnumerator.Protocol.cs @@ -0,0 +1,175 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections; +using System.Collections.Generic; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.Assistants; + +internal partial class RunOperationUpdateEnumerator : + IAsyncEnumerator, + IEnumerator +{ + private readonly ClientPipeline _pipeline; + private readonly Uri _endpoint; + private readonly string _threadId; + private readonly string _runId; + private readonly CancellationToken _cancellationToken; + + private ClientResult? _current; + private bool _hasNext = true; + + public RunOperationUpdateEnumerator( + ClientPipeline pipeline, + Uri endpoint, + string threadId, + string runId, + CancellationToken cancellationToken) + { + _pipeline = pipeline; + _endpoint = endpoint; + + _threadId = threadId; + _runId = runId; + + _cancellationToken = cancellationToken; + } + + public ClientResult Current => _current!; + + #region IEnumerator methods + + object IEnumerator.Current => _current!; + + bool IEnumerator.MoveNext() + { + if (!_hasNext) + { + _current = null; + return false; + } + + ClientResult result = GetRun(_threadId, _runId, _cancellationToken.ToRequestOptions()); + + _current = result; + _hasNext = HasNext(result); + + return true; + } + + void IEnumerator.Reset() => _current = null; + + void IDisposable.Dispose() { } + + #endregion + + #region IAsyncEnumerator methods + + ClientResult IAsyncEnumerator.Current => _current!; + + public async ValueTask MoveNextAsync() + { + if (!_hasNext) + { + _current = null; + return false; + } + + ClientResult result = await GetRunAsync(_threadId, _runId, _cancellationToken.ToRequestOptions()).ConfigureAwait(false); + + _current = result; + _hasNext = HasNext(result); + + return true; + } + + // TODO: handle Dispose and DisposeAsync using proper patterns? + ValueTask IAsyncDisposable.DisposeAsync() => default; + + #endregion + + // Methods used by both implementations + + private bool HasNext(ClientResult result) + { + PipelineResponse response = result.GetRawResponse(); + + // TODO: don't parse JsonDocument twice if possible + using JsonDocument doc = JsonDocument.Parse(response.Content); + string? status = doc.RootElement.GetProperty("status"u8).GetString(); + + bool isComplete = status == "expired" || + status == "completed" || + status == "failed" || + status == "incomplete" || + status == "cancelled"; + + return !isComplete; + } + + // Generated methods + + /// + /// [Protocol Method] Retrieves a run. + /// + /// The ID of the [thread](/docs/api-reference/threads) that was run. + /// The ID of the run to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual async Task GetRunAsync(string threadId, string runId, RequestOptions? options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + + using PipelineMessage message = CreateGetRunRequest(threadId, runId, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + /// + /// [Protocol Method] Retrieves a run. + /// + /// The ID of the [thread](/docs/api-reference/threads) that was run. + /// The ID of the run to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual ClientResult GetRun(string threadId, string runId, RequestOptions? options) + { + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(runId, nameof(runId)); + + using PipelineMessage message = CreateGetRunRequest(threadId, runId, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + internal PipelineMessage CreateGetRunRequest(string threadId, string runId, RequestOptions? options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "GET"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/threads/", false); + uri.AppendPath(threadId, true); + uri.AppendPath("/runs/", false); + uri.AppendPath(runId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + private static PipelineMessageClassifier? _pipelineMessageClassifier200; + private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 ??= PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); +} diff --git a/src/To.Be.Generated/RunOperationUpdateEnumerator.cs b/src/To.Be.Generated/RunOperationUpdateEnumerator.cs new file mode 100644 index 000000000..8d4857713 --- /dev/null +++ b/src/To.Be.Generated/RunOperationUpdateEnumerator.cs @@ -0,0 +1,54 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; + +#nullable enable + +namespace OpenAI.Assistants; + +internal partial class RunOperationUpdateEnumerator : + IAsyncEnumerator>, + IEnumerator> +{ + #region IEnumerator> methods + + ClientResult IEnumerator>.Current + { + get + { + if (Current is null) + { + return default!; + } + + return GetUpdateFromResult(Current); + } + } + + #endregion + + #region IAsyncEnumerator> methods + + ClientResult IAsyncEnumerator>.Current + { + get + { + if (Current is null) + { + return default!; + } + + return GetUpdateFromResult(Current); + } + } + + #endregion + + // Methods used by convenience implementation + private ClientResult GetUpdateFromResult(ClientResult result) + { + PipelineResponse response = result.GetRawResponse(); + ThreadRun run = ThreadRun.FromResponse(response); + return ClientResult.FromValue(run, response); + } +} diff --git a/src/To.Be.Generated/StreamingRunOperation.cs b/src/To.Be.Generated/StreamingRunOperation.cs new file mode 100644 index 000000000..d47542fe9 --- /dev/null +++ b/src/To.Be.Generated/StreamingRunOperation.cs @@ -0,0 +1,280 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.Assistants; + +// Streaming version +public partial class StreamingRunOperation : RunOperation +{ + private readonly Func> _createRunAsync; + private readonly Func _createRun; + + + private StreamingRunOperationUpdateEnumerator? _enumerator; + + internal StreamingRunOperation( + ClientPipeline pipeline, + Uri endpoint, + + // Note if we pass funcs we don't need to pass in the pipeline. + Func> createRunAsync, + Func createRun) + : base(pipeline, endpoint) + { + _createRunAsync = createRunAsync; + _createRun = createRun; + } + + // TODO: this duplicates a field on the base type. Address? + public override bool IsCompleted { get; protected set; } + + public override async Task WaitUntilStoppedAsync(CancellationToken cancellationToken = default) + { + // TODO: add validation that stream is only requested and enumerated once. + // TODO: Make sure you can't create the same run twice and/or submit tools twice + // somehow, even accidentally. + + await foreach (StreamingUpdate update in GetUpdatesStreamingAsync(cancellationToken).ConfigureAwait(false)) + { + // Should terminate naturally when get to "requires action" because + // the SSE stream will end. + } + } + + public override void WaitUntilStopped(CancellationToken cancellationToken = default) + { + foreach (StreamingUpdate update in GetUpdatesStreaming(cancellationToken)) + { + // Should terminate naturally when get to "requires action" because + // the SSE stream will end. + } + } + + // Public APIs specific to streaming LRO + public virtual async IAsyncEnumerable GetUpdatesStreamingAsync( + [EnumeratorCancellation] CancellationToken cancellationToken = default) + { + try + { + if (_enumerator is null) + { + AsyncStreamingUpdateCollection updates = new AsyncStreamingUpdateCollection(_createRunAsync); + _enumerator = new StreamingRunOperationUpdateEnumerator(updates); + } + + while (await _enumerator.MoveNextAsync().ConfigureAwait(false)) + { + if (_enumerator.Current is RunUpdate update) + { + ApplyUpdate(update); + } + + cancellationToken.ThrowIfCancellationRequested(); + + yield return _enumerator.Current; + } + } + finally + { + if (_enumerator != null) + { + await _enumerator.DisposeAsync(); + _enumerator = null; + } + } + } + + public virtual IEnumerable GetUpdatesStreaming(CancellationToken cancellationToken = default) + { + try + { + if (_enumerator is null) + { + StreamingUpdateCollection updates = new StreamingUpdateCollection(_createRun); + _enumerator = new StreamingRunOperationUpdateEnumerator(updates); + } + + while (_enumerator.MoveNext()) + { + if (_enumerator.Current is RunUpdate update) + { + ApplyUpdate(update); + } + + cancellationToken.ThrowIfCancellationRequested(); + + yield return _enumerator.Current; + } + } + finally + { + if (_enumerator != null) + { + _enumerator.Dispose(); + _enumerator = null; + } + } + } + + public override async IAsyncEnumerable GetUpdatesAsync(TimeSpan? pollingInterval = null, [EnumeratorCancellation] CancellationToken cancellationToken = default) + { + if (pollingInterval is not null) + { + throw new NotSupportedException("Cannot specify polling interval for streaming operation."); + } + + await foreach (StreamingUpdate update in GetUpdatesStreamingAsync(cancellationToken).ConfigureAwait(false)) + { + if (update is RunUpdate runUpdate) + { + yield return runUpdate; + } + } + } + + public override IEnumerable GetUpdates(TimeSpan? pollingInterval = null, CancellationToken cancellationToken = default) + { + if (pollingInterval is not null) + { + throw new NotSupportedException("Cannot specify polling interval for streaming operation."); + } + + foreach (StreamingUpdate update in GetUpdatesStreaming()) + { + if (update is RunUpdate runUpdate) + { + yield return runUpdate; + } + } + } + + private void ApplyUpdate(ThreadRun update) + { + RunId ??= update.Id; + ThreadId ??= update.ThreadId; + + Value = update; + Status = update.Status; + IsCompleted = update.Status.IsTerminal; + + SetRawResponse(_enumerator!.GetRawResponse()); + } + + public virtual async Task SubmitToolOutputsToRunStreamingAsync( + IEnumerable toolOutputs, + CancellationToken cancellationToken = default) + { + if (ThreadId is null || RunId is null) + { + throw new InvalidOperationException("Cannot submit tools until first update stream has been applied."); + } + + BinaryContent content = new InternalSubmitToolOutputsRunRequest( + toolOutputs.ToList(), stream: true, null).ToBinaryContent(); + + // TODO: can we do this the same way as this in the other method instead + // of having to take all those funcs? + async Task getResultAsync() => + await SubmitToolOutputsToRunAsync(ThreadId, RunId, content, cancellationToken.ToRequestOptions(streaming: true)) + .ConfigureAwait(false); + + AsyncStreamingUpdateCollection updates = new AsyncStreamingUpdateCollection(getResultAsync); + if (_enumerator is null) + { + _enumerator = new StreamingRunOperationUpdateEnumerator(updates); + } + else + { + await _enumerator.ReplaceUpdateCollectionAsync(updates).ConfigureAwait(false); + } + } + + public virtual void SubmitToolOutputsToRunStreaming( + IEnumerable toolOutputs, + CancellationToken cancellationToken = default) + { + if (ThreadId is null || RunId is null) + { + throw new InvalidOperationException("Cannot submit tools until first update stream has been applied."); + } + + if (_enumerator is null) + { + throw new InvalidOperationException( + "Cannot submit tools until first run update stream has been enumerated. " + + "Call 'Wait' or 'GetUpdatesStreaming' to read update stream."); + } + + BinaryContent content = new InternalSubmitToolOutputsRunRequest( + toolOutputs.ToList(), stream: true, null).ToBinaryContent(); + + // TODO: can we do this the same way as this in the other method instead + // of having to take all those funcs? + ClientResult getResult() => + SubmitToolOutputsToRun(ThreadId, RunId, content, cancellationToken.ToRequestOptions(streaming: true)); + + StreamingUpdateCollection updates = new StreamingUpdateCollection(getResult); + if (_enumerator is null) + { + _enumerator = new StreamingRunOperationUpdateEnumerator(updates); + } + else + { + _enumerator.ReplaceUpdateCollection(updates); + } + } + + #region hide + + //// used to defer first request. + //internal virtual async Task CreateRunAsync(string threadId, BinaryContent content, RequestOptions? options = null) + //{ + // Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); + // Argument.AssertNotNull(content, nameof(content)); + + // PipelineMessage? message = null; + // try + // { + // message = CreateCreateRunRequest(threadId, content, options); + // return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + // } + // finally + // { + // if (options?.BufferResponse != false) + // { + // message?.Dispose(); + // } + // } + //} + + //internal PipelineMessage CreateCreateRunRequest(string threadId, BinaryContent content, RequestOptions? options) + //{ + // var message = Pipeline.CreateMessage(); + // message.ResponseClassifier = PipelineMessageClassifier200; + // var request = message.Request; + // request.Method = "POST"; + // var uri = new ClientUriBuilder(); + // uri.Reset(_endpoint); + // uri.AppendPath("/threads/", false); + // uri.AppendPath(threadId, true); + // uri.AppendPath("/runs", false); + // request.Uri = uri.ToUri(); + // request.Headers.Set("Accept", "application/json"); + // request.Headers.Set("Content-Type", "application/json"); + // request.Content = content; + // message.Apply(options); + // return message; + //} + + //private static PipelineMessageClassifier? _pipelineMessageClassifier200; + //private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 ??= PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); + #endregion +} diff --git a/src/To.Be.Generated/StreamingRunOperationUpdateEnumerator.cs b/src/To.Be.Generated/StreamingRunOperationUpdateEnumerator.cs new file mode 100644 index 000000000..93a933cbd --- /dev/null +++ b/src/To.Be.Generated/StreamingRunOperationUpdateEnumerator.cs @@ -0,0 +1,145 @@ +using System; +using System.ClientModel.Primitives; +using System.Collections; +using System.Collections.Generic; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.Assistants; + +internal partial class StreamingRunOperationUpdateEnumerator : + IAsyncEnumerator, + IEnumerator +{ + private StreamingUpdate? _current; + + private AsyncStreamingUpdateCollection? _asyncUpdates; + private IAsyncEnumerator? _asyncEnumerator; + + private StreamingUpdateCollection? _updates; + private IEnumerator? _enumerator; + + public StreamingRunOperationUpdateEnumerator( + AsyncStreamingUpdateCollection updates) + { + _asyncUpdates = updates; + } + + public StreamingRunOperationUpdateEnumerator( + StreamingUpdateCollection updates) + { + _updates = updates; + } + + // Cache this here for now + public PipelineResponse GetRawResponse() => + _asyncUpdates?.GetRawResponse() ?? + _updates?.GetRawResponse() ?? + throw new InvalidOperationException("No response available."); + + public StreamingUpdate Current => _current!; + + #region IEnumerator methods + + object IEnumerator.Current => _current!; + + public bool MoveNext() + { + if (_updates is null) + { + throw new InvalidOperationException("Cannot MoveNext after starting enumerator asynchronously."); + } + + _enumerator ??= _updates.GetEnumerator(); + + bool movedNext = _enumerator.MoveNext(); + _current = _enumerator.Current; + return movedNext; + } + + void IEnumerator.Reset() + { + throw new NotSupportedException("Cannot reset streaming enumerator."); + } + + public void Dispose() + { + if (_enumerator != null) + { + _enumerator.Dispose(); + _enumerator = null; + } + } + + #endregion + + #region IAsyncEnumerator methods + + public async ValueTask MoveNextAsync() + { + if (_asyncUpdates is null) + { + throw new InvalidOperationException("Cannot MoveNextAsync after starting enumerator synchronously."); + } + + _asyncEnumerator ??= _asyncUpdates.GetAsyncEnumerator(); + + bool movedNext = await _asyncEnumerator.MoveNextAsync().ConfigureAwait(false); + _current = _asyncEnumerator.Current; + return movedNext; + } + + public async ValueTask DisposeAsync() + { + // TODO: implement according to pattern + + if (_asyncEnumerator is null) + { + return; + } + + await _asyncEnumerator.DisposeAsync().ConfigureAwait(false); + } + + #endregion + + public async Task ReplaceUpdateCollectionAsync(AsyncStreamingUpdateCollection updates) + { + if (_asyncUpdates is null) + { + throw new InvalidOperationException("Cannot replace null update collection."); + } + + if (_updates is not null || _enumerator is not null) + { + throw new InvalidOperationException("Cannot being enumerating asynchronously after enumerating synchronously."); + } + + if (_asyncEnumerator is not null) + { + await _asyncEnumerator.DisposeAsync().ConfigureAwait(false); + _asyncEnumerator = null; + } + + _asyncUpdates = updates; + } + + public void ReplaceUpdateCollection(StreamingUpdateCollection updates) + { + if (_updates is null) + { + throw new InvalidOperationException("Cannot replace null update collection."); + } + + if (_asyncUpdates is not null || _asyncEnumerator is not null) + { + throw new InvalidOperationException("Cannot being enumerating synchronously after enumerating asynchronously."); + } + + _enumerator?.Dispose(); + _enumerator = null; + + _updates = updates; + } +} diff --git a/src/To.Be.Generated/VectorStoreFileBatchOperation.Protocol.cs b/src/To.Be.Generated/VectorStoreFileBatchOperation.Protocol.cs new file mode 100644 index 000000000..c95cec02a --- /dev/null +++ b/src/To.Be.Generated/VectorStoreFileBatchOperation.Protocol.cs @@ -0,0 +1,343 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.VectorStores; + +// Protocol version +public partial class VectorStoreFileBatchOperation : OperationResult +{ + private readonly ClientPipeline _pipeline; + private readonly Uri _endpoint; + + private readonly string _vectorStoreId; + private readonly string _batchId; + + private PollingInterval _pollingInterval; + + // For use with protocol methods where the response has been obtained prior + // to creation of the LRO instance. + internal VectorStoreFileBatchOperation( + ClientPipeline pipeline, + Uri endpoint, + string vectorStoreId, + string batchId, + string status, + PipelineResponse response) + : base(response) + { + _pipeline = pipeline; + _endpoint = endpoint; + + _vectorStoreId = vectorStoreId; + _batchId = batchId; + + IsCompleted = GetIsCompleted(status); + + _pollingInterval = new(); + + RehydrationToken = new VectorStoreFileBatchOperationToken(vectorStoreId, batchId); + } + + public override ContinuationToken? RehydrationToken { get; protected set; } + + public override bool IsCompleted { get; protected set; } + + // These are replaced when LRO is evolved to have conveniences + //public override async Task WaitAsync(CancellationToken cancellationToken = default) + //{ + // IAsyncEnumerator enumerator = + // new VectorStoreFileBatchOperationUpdateEnumerator( + // _pipeline, _endpoint, _vectorStoreId, _batchId, _options); + + // while (await enumerator.MoveNextAsync().ConfigureAwait(false)) + // { + // ApplyUpdate(enumerator.Current); + + // cancellationToken.ThrowIfCancellationRequested(); + + // // TODO: Plumb through cancellation token + // await _pollingInterval.WaitAsync(); + // } + //} + + //public override void Wait(CancellationToken cancellationToken = default) + //{ + // IEnumerator enumerator = + // new VectorStoreFileBatchOperationUpdateEnumerator( + // _pipeline, _endpoint, _vectorStoreId, _batchId, _options); + + // while (enumerator.MoveNext()) + // { + // ApplyUpdate(enumerator.Current); + + // cancellationToken.ThrowIfCancellationRequested(); + + // _pollingInterval.Wait(); + // } + //} + + private void ApplyUpdate(ClientResult result) + { + PipelineResponse response = result.GetRawResponse(); + + using JsonDocument doc = JsonDocument.Parse(response.Content); + string? status = doc.RootElement.GetProperty("status"u8).GetString(); + + IsCompleted = GetIsCompleted(status); + SetRawResponse(response); + } + + private static bool GetIsCompleted(string? status) + { + return status == "completed" || + status == "cancelled" || + status == "failed"; + } + + // Generated protocol methods + + /// + /// [Protocol Method] Retrieves a vector store file batch. + /// + /// The ID of the vector store that the file batch belongs to. + /// The ID of the file batch being retrieved. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task GetBatchFileJobAsync(string vectorStoreId, string batchId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); + + using PipelineMessage message = CreateGetVectorStoreFileBatchRequest(vectorStoreId, batchId, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + /// + /// [Protocol Method] Retrieves a vector store file batch. + /// + /// The ID of the vector store that the file batch belongs to. + /// The ID of the file batch being retrieved. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetBatchFileJob(string vectorStoreId, string batchId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); + + using PipelineMessage message = CreateGetVectorStoreFileBatchRequest(vectorStoreId, batchId, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + /// + /// [Protocol Method] Cancel a vector store file batch. This attempts to cancel the processing of files in this batch as soon as possible. + /// + /// The ID of the vector store that the file batch belongs to. + /// The ID of the file batch to cancel. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task CancelBatchFileJobAsync(string vectorStoreId, string batchId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); + + using PipelineMessage message = CreateCancelVectorStoreFileBatchRequest(vectorStoreId, batchId, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + /// + /// [Protocol Method] Cancel a vector store file batch. This attempts to cancel the processing of files in this batch as soon as possible. + /// + /// The ID of the vector store that the file batch belongs to. + /// The ID of the file batch to cancel. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult CancelBatchFileJob(string vectorStoreId, string batchId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); + + using PipelineMessage message = CreateCancelVectorStoreFileBatchRequest(vectorStoreId, batchId, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + /// + /// [Protocol Method] Returns a paginated collection of vector store files in a batch. + /// + /// The ID of the vector store that the file batch belongs to. + /// The ID of the file batch that the files belong to. + /// + /// A limit on the number of objects to be returned. Limit can range between 1 and 100, and the + /// default is 20. + /// + /// + /// Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and`desc` + /// for descending order. Allowed values: "asc" | "desc" + /// + /// + /// A cursor for use in pagination. `after` is an object ID that defines your place in the list. + /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your + /// subsequent call can include after=obj_foo in order to fetch the next page of the list. + /// + /// + /// A cursor for use in pagination. `before` is an object ID that defines your place in the list. + /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your + /// subsequent call can include before=obj_foo in order to fetch the previous page of the list. + /// + /// Filter by file status. One of `in_progress`, `completed`, `failed`, `cancelled`. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// A collection of service responses, each holding a page of values. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual IAsyncEnumerable GetFileAssociationsAsync(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); + + VectorStoreFileBatchesPageEnumerator enumerator = new VectorStoreFileBatchesPageEnumerator(_pipeline, _endpoint, vectorStoreId, batchId, limit, order, after, before, filter, options); + return PageCollectionHelpers.CreateAsync(enumerator); + } + + /// + /// [Protocol Method] Returns a paginated collection of vector store files in a batch. + /// + /// The ID of the vector store that the file batch belongs to. + /// The ID of the file batch that the files belong to. + /// + /// A limit on the number of objects to be returned. Limit can range between 1 and 100, and the + /// default is 20. + /// + /// + /// Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and`desc` + /// for descending order. Allowed values: "asc" | "desc" + /// + /// + /// A cursor for use in pagination. `after` is an object ID that defines your place in the list. + /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your + /// subsequent call can include after=obj_foo in order to fetch the next page of the list. + /// + /// + /// A cursor for use in pagination. `before` is an object ID that defines your place in the list. + /// For instance, if you make a list request and receive 100 objects, ending with obj_foo, your + /// subsequent call can include before=obj_foo in order to fetch the previous page of the list. + /// + /// Filter by file status. One of `in_progress`, `completed`, `failed`, `cancelled`. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// A collection of service responses, each holding a page of values. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual IEnumerable GetFileAssociations(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); + + VectorStoreFileBatchesPageEnumerator enumerator = new VectorStoreFileBatchesPageEnumerator(_pipeline, _endpoint, vectorStoreId, batchId, limit, order, after, before, filter, options); + return PageCollectionHelpers.Create(enumerator); + } + + internal PipelineMessage CreateGetVectorStoreFileBatchRequest(string vectorStoreId, string batchId, RequestOptions options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "GET"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/vector_stores/", false); + uri.AppendPath(vectorStoreId, true); + uri.AppendPath("/file_batches/", false); + uri.AppendPath(batchId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal PipelineMessage CreateCancelVectorStoreFileBatchRequest(string vectorStoreId, string batchId, RequestOptions options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "POST"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/vector_stores/", false); + uri.AppendPath(vectorStoreId, true); + uri.AppendPath("/file_batches/", false); + uri.AppendPath(batchId, true); + uri.AppendPath("/cancel", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal PipelineMessage CreateGetFilesInVectorStoreBatchesRequest(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, RequestOptions options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "GET"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/vector_stores/", false); + uri.AppendPath(vectorStoreId, true); + uri.AppendPath("/file_batches/", false); + uri.AppendPath(batchId, true); + uri.AppendPath("/files", false); + if (limit != null) + { + uri.AppendQuery("limit", limit.Value, true); + } + if (order != null) + { + uri.AppendQuery("order", order, true); + } + if (after != null) + { + uri.AppendQuery("after", after, true); + } + if (before != null) + { + uri.AppendQuery("before", before, true); + } + if (filter != null) + { + uri.AppendQuery("filter", filter, true); + } + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + private static PipelineMessageClassifier? _pipelineMessageClassifier200; + private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 ??= PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); +} \ No newline at end of file diff --git a/src/To.Be.Generated/VectorStoreFileBatchOperation.cs b/src/To.Be.Generated/VectorStoreFileBatchOperation.cs new file mode 100644 index 000000000..e6a3e6bf3 --- /dev/null +++ b/src/To.Be.Generated/VectorStoreFileBatchOperation.cs @@ -0,0 +1,291 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.VectorStores; + +// Convenience version +public partial class VectorStoreFileBatchOperation : OperationResult +{ + // Convenience version + internal VectorStoreFileBatchOperation( + ClientPipeline pipeline, + Uri endpoint, + ClientResult result) + : base(result.GetRawResponse()) + { + _pipeline = pipeline; + _endpoint = endpoint; + + Value = result; + Status = Value.Status; + IsCompleted = GetIsCompleted(Value.Status); + + _vectorStoreId = Value.VectorStoreId; + _batchId = Value.BatchId; + + _pollingInterval = new(); + + RehydrationToken = new VectorStoreFileBatchOperationToken(VectorStoreId, BatchId); + } + + // TODO: interesting question regarding whether these properties should be + // nullable or not. If someone has called the protocol method, do they want + // to pay the perf cost of deserialization? This could capitalize on a + // property on RequestOptions that allows the caller to opt-in to creation + // of convenience models. For now, make them nullable so I don't have to + // pass the model into the constructor from a protocol method. + public VectorStoreBatchFileJob? Value { get; private set; } + public VectorStoreBatchFileJobStatus? Status { get; private set; } + + public string VectorStoreId { get => _vectorStoreId; } + public string BatchId { get => _batchId; } + + public override async Task WaitForCompletionAsync(CancellationToken cancellationToken = default) + { + IAsyncEnumerator> enumerator = + new VectorStoreFileBatchOperationUpdateEnumerator( + _pipeline, _endpoint, _vectorStoreId, _batchId, cancellationToken); + + while (await enumerator.MoveNextAsync().ConfigureAwait(false)) + { + ApplyUpdate(enumerator.Current); + + await _pollingInterval.WaitAsync(cancellationToken); + } + } + + public override void WaitForCompletion(CancellationToken cancellationToken = default) + { + IEnumerator> enumerator = + new VectorStoreFileBatchOperationUpdateEnumerator( + _pipeline, _endpoint, _vectorStoreId, _batchId, cancellationToken); + + while (enumerator.MoveNext()) + { + ApplyUpdate(enumerator.Current); + + cancellationToken.ThrowIfCancellationRequested(); + + _pollingInterval.Wait(); + } + } + + private void ApplyUpdate(ClientResult update) + { + Value = update; + Status = Value.Status; + + IsCompleted = GetIsCompleted(Value.Status); + SetRawResponse(update.GetRawResponse()); + } + + private static bool GetIsCompleted(VectorStoreBatchFileJobStatus status) + { + return status == VectorStoreBatchFileJobStatus.Completed || + status == VectorStoreBatchFileJobStatus.Cancelled || + status == VectorStoreBatchFileJobStatus.Failed; + } + + // Generated convenience methods + + /// + /// Gets an existing vector store batch file ingestion job from a known vector store ID and job ID. + /// + /// A token that can be used to cancel this method call. + /// A instance representing the ingestion operation. + public virtual async Task> GetBatchFileJobAsync(CancellationToken cancellationToken = default) + { + ClientResult result = await GetBatchFileJobAsync(_vectorStoreId, _batchId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + PipelineResponse response = result.GetRawResponse(); + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromResponse(response); + return ClientResult.FromValue(value, response); + } + + /// + /// Gets an existing vector store batch file ingestion job from a known vector store ID and job ID. + /// + /// A token that can be used to cancel this method call. + /// A instance representing the ingestion operation. + public virtual ClientResult GetBatchFileJob(CancellationToken cancellationToken = default) + { + ClientResult result = GetBatchFileJob(_vectorStoreId, _batchId, cancellationToken.ToRequestOptions()); + PipelineResponse response = result.GetRawResponse(); + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromResponse(response); + return ClientResult.FromValue(value, response); + } + + /// + /// Cancels an in-progress . + /// + /// A token that can be used to cancel this method call. + /// An updated instance. + public virtual async Task> CancelBatchFileJobAsync(CancellationToken cancellationToken = default) + { + ClientResult result = await CancelBatchFileJobAsync(_vectorStoreId, _batchId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + PipelineResponse response = result.GetRawResponse(); + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromResponse(response); + return ClientResult.FromValue(value, response); + } + + /// + /// Cancels an in-progress . + /// + /// A token that can be used to cancel this method call. + /// An updated instance. + public virtual ClientResult CancelBatchFileJob(CancellationToken cancellationToken = default) + { + ClientResult result = CancelBatchFileJob(_vectorStoreId, _batchId, cancellationToken.ToRequestOptions()); + PipelineResponse response = result.GetRawResponse(); + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromResponse(response); + return ClientResult.FromValue(value, response); + } + + /// + /// Gets a page collection of file associations associated with a vector store batch file job, representing the files + /// that were scheduled for ingestion into the vector store. + /// + /// Options describing the collection to return. + /// A token that can be used to cancel this method call. + /// holds pages of values. To obtain a collection of values, call + /// . To obtain the current + /// page of values, call . + /// A collection of pages of . + public virtual AsyncPageCollection GetFileAssociationsAsync( + VectorStoreFileAssociationCollectionOptions? options = default, + CancellationToken cancellationToken = default) + { + VectorStoreFileBatchesPageEnumerator enumerator = new(_pipeline, _endpoint, + _vectorStoreId, + _batchId, + options?.PageSize, + options?.Order?.ToString(), + options?.AfterId, + options?.BeforeId, + options?.Filter?.ToString(), + cancellationToken.ToRequestOptions()); + + return PageCollectionHelpers.CreateAsync(enumerator); + } + + /// + /// Rehydrates a page collection of file associations from a page token. + /// + /// Page token corresponding to the first page of the collection to rehydrate. + /// A token that can be used to cancel this method call. + /// holds pages of values. To obtain a collection of values, call + /// . To obtain the current + /// page of values, call . + /// A collection of pages of . + public virtual AsyncPageCollection GetFileAssociationsAsync( + ContinuationToken firstPageToken, + CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(firstPageToken, nameof(firstPageToken)); + + VectorStoreFileBatchesPageToken pageToken = VectorStoreFileBatchesPageToken.FromToken(firstPageToken); + + if (_vectorStoreId != pageToken.VectorStoreId) + { + throw new ArgumentException( + "Invalid page token. 'VectorStoreId' value does not match page token value.", + nameof(firstPageToken)); + } + + if (_batchId != pageToken.BatchId) + { + throw new ArgumentException( + "Invalid page token. 'BatchId' value does not match page token value.", + nameof(firstPageToken)); + } + + VectorStoreFileBatchesPageEnumerator enumerator = new(_pipeline, _endpoint, + pageToken.VectorStoreId, + pageToken.BatchId, + pageToken.Limit, + pageToken.Order, + pageToken.After, + pageToken.Before, + pageToken.Filter, + cancellationToken.ToRequestOptions()); + + return PageCollectionHelpers.CreateAsync(enumerator); + } + + /// + /// Gets a page collection of file associations associated with a vector store batch file job, representing the files + /// that were scheduled for ingestion into the vector store. + /// + /// Options describing the collection to return. + /// A token that can be used to cancel this method call. + /// holds pages of values. To obtain a collection of values, call + /// . To obtain the current + /// page of values, call . + /// A collection of pages of . + public virtual PageCollection GetFileAssociations( + VectorStoreFileAssociationCollectionOptions? options = default, + CancellationToken cancellationToken = default) + { + VectorStoreFileBatchesPageEnumerator enumerator = new(_pipeline, _endpoint, + _vectorStoreId, + _batchId, + options?.PageSize, + options?.Order?.ToString(), + options?.AfterId, + options?.BeforeId, + options?.Filter?.ToString(), + cancellationToken.ToRequestOptions()); + + return PageCollectionHelpers.Create(enumerator); + } + + /// + /// Rehydrates a page collection of file associations from a page token. + /// that were scheduled for ingestion into the vector store. + /// + /// Page token corresponding to the first page of the collection to rehydrate. + /// A token that can be used to cancel this method call. + /// holds pages of values. To obtain a collection of values, call + /// . To obtain the current + /// page of values, call . + /// A collection of pages of . + public virtual PageCollection GetFileAssociations( + ContinuationToken firstPageToken, + CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(firstPageToken, nameof(firstPageToken)); + + VectorStoreFileBatchesPageToken pageToken = VectorStoreFileBatchesPageToken.FromToken(firstPageToken); + + if (_vectorStoreId != pageToken.VectorStoreId) + { + throw new ArgumentException( + "Invalid page token. 'VectorStoreId' value does not match page token value.", + nameof(firstPageToken)); + } + + if (_batchId != pageToken.BatchId) + { + throw new ArgumentException( + "Invalid page token. 'BatchId' value does not match page token value.", + nameof(firstPageToken)); + } + + VectorStoreFileBatchesPageEnumerator enumerator = new(_pipeline, _endpoint, + pageToken.VectorStoreId, + pageToken.BatchId, + pageToken.Limit, + pageToken.Order, + pageToken.After, + pageToken.Before, + pageToken.Filter, + cancellationToken.ToRequestOptions()); + + return PageCollectionHelpers.Create(enumerator); + } +} \ No newline at end of file diff --git a/src/To.Be.Generated/VectorStoreFileBatchOperationToken.cs b/src/To.Be.Generated/VectorStoreFileBatchOperationToken.cs new file mode 100644 index 000000000..bcda6b72d --- /dev/null +++ b/src/To.Be.Generated/VectorStoreFileBatchOperationToken.cs @@ -0,0 +1,101 @@ +using System; +using System.ClientModel; +using System.Diagnostics; +using System.IO; +using System.Text.Json; + +#nullable enable + +namespace OpenAI.VectorStores; + +internal class VectorStoreFileBatchOperationToken : ContinuationToken +{ + public VectorStoreFileBatchOperationToken(string vectorStoreId, string batchId) + { + VectorStoreId = vectorStoreId; + BatchId = batchId; + } + + public string VectorStoreId { get; } + + public string BatchId { get; } + + public override BinaryData ToBytes() + { + using MemoryStream stream = new(); + using Utf8JsonWriter writer = new(stream); + writer.WriteStartObject(); + + writer.WriteString("vectorStoreId", VectorStoreId); + writer.WriteString("batchId", BatchId); + + writer.WriteEndObject(); + + writer.Flush(); + stream.Position = 0; + + return BinaryData.FromStream(stream); + } + + public static VectorStoreFileBatchOperationToken FromToken(ContinuationToken continuationToken) + { + if (continuationToken is VectorStoreFileBatchOperationToken token) + { + return token; + } + + BinaryData data = continuationToken.ToBytes(); + + if (data.ToMemory().Length == 0) + { + throw new ArgumentException("Failed to create VectorStoreFileBatchOperationToken from provided continuationToken.", nameof(continuationToken)); + } + + Utf8JsonReader reader = new(data); + + string vectorStoreId = null!; + string batchId = null!; + + reader.Read(); + + Debug.Assert(reader.TokenType == JsonTokenType.StartObject); + + while (reader.Read()) + { + if (reader.TokenType == JsonTokenType.EndObject) + { + break; + } + + Debug.Assert(reader.TokenType == JsonTokenType.PropertyName); + + string propertyName = reader.GetString()!; + + switch (propertyName) + { + case "vectorStoreId": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + vectorStoreId = reader.GetString()!; + break; + + case "batchId": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + batchId = reader.GetString()!; + break; + + default: + throw new JsonException($"Unrecognized property '{propertyName}'."); + } + } + + if (vectorStoreId is null || batchId is null) + { + throw new ArgumentException("Failed to create VectorStoreFileBatchOperationToken from provided continuationToken.", nameof(continuationToken)); + } + + return new(vectorStoreId, batchId); + } +} + diff --git a/src/To.Be.Generated/VectorStoreFileBatchOperationUpdateEnumerator.Protocol.cs b/src/To.Be.Generated/VectorStoreFileBatchOperationUpdateEnumerator.Protocol.cs new file mode 100644 index 000000000..bf3b1f1a0 --- /dev/null +++ b/src/To.Be.Generated/VectorStoreFileBatchOperationUpdateEnumerator.Protocol.cs @@ -0,0 +1,175 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.VectorStores; + +internal partial class VectorStoreFileBatchOperationUpdateEnumerator : + IAsyncEnumerator, + IEnumerator +{ + private readonly ClientPipeline _pipeline; + private readonly Uri _endpoint; + private readonly CancellationToken _cancellationToken; + + private readonly string _vectorStoreId; + private readonly string _batchId; + + private ClientResult? _current; + private bool _hasNext = true; + + public VectorStoreFileBatchOperationUpdateEnumerator( + ClientPipeline pipeline, + Uri endpoint, + string vectorStoreId, + string batchId, + CancellationToken cancellationToken) + { + _pipeline = pipeline; + _endpoint = endpoint; + + _vectorStoreId = vectorStoreId; + _batchId = batchId; + + _cancellationToken = cancellationToken; + } + + public ClientResult Current => _current!; + + #region IEnumerator methods + + object IEnumerator.Current => _current!; + + bool IEnumerator.MoveNext() + { + if (!_hasNext) + { + _current = null; + return false; + } + + ClientResult result = GetBatchFileJob(_vectorStoreId, _batchId, _cancellationToken.ToRequestOptions()); + + _current = result; + _hasNext = HasNext(result); + + return true; + } + + void IEnumerator.Reset() => _current = null; + + void IDisposable.Dispose() { } + + #endregion + + #region IAsyncEnumerator methods + + ClientResult IAsyncEnumerator.Current => _current!; + + public async ValueTask MoveNextAsync() + { + if (!_hasNext) + { + _current = null; + return false; + } + + ClientResult result = await GetBatchFileJobAsync(_vectorStoreId, _batchId, _cancellationToken.ToRequestOptions()).ConfigureAwait(false); + + _current = result; + _hasNext = HasNext(result); + + return true; + } + + // TODO: handle Dispose and DisposeAsync using proper patterns? + ValueTask IAsyncDisposable.DisposeAsync() => default; + + #endregion + + private bool HasNext(ClientResult result) + { + PipelineResponse response = result.GetRawResponse(); + + // TODO: don't parse JsonDocument twice if possible + using JsonDocument doc = JsonDocument.Parse(response.Content); + string? status = doc.RootElement.GetProperty("status"u8).GetString(); + + bool isComplete = status == "completed" || + status == "cancelled" || + status == "failed"; + + return !isComplete; + } + + // Generated methods + + /// + /// [Protocol Method] Retrieves a vector store file batch. + /// + /// The ID of the vector store that the file batch belongs to. + /// The ID of the file batch being retrieved. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task GetBatchFileJobAsync(string vectorStoreId, string batchId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); + + using PipelineMessage message = CreateGetVectorStoreFileBatchRequest(vectorStoreId, batchId, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + /// + /// [Protocol Method] Retrieves a vector store file batch. + /// + /// The ID of the vector store that the file batch belongs to. + /// The ID of the file batch being retrieved. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// or is null. + /// or is an empty string, and was expected to be non-empty. + /// Service returned a non-success status code. + /// The response returned from the service. + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetBatchFileJob(string vectorStoreId, string batchId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); + + using PipelineMessage message = CreateGetVectorStoreFileBatchRequest(vectorStoreId, batchId, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + internal PipelineMessage CreateGetVectorStoreFileBatchRequest(string vectorStoreId, string batchId, RequestOptions options) + { + var message = _pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + var request = message.Request; + request.Method = "GET"; + var uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/vector_stores/", false); + uri.AppendPath(vectorStoreId, true); + uri.AppendPath("/file_batches/", false); + uri.AppendPath(batchId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + private static PipelineMessageClassifier? _pipelineMessageClassifier200; + private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 ??= PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); +} diff --git a/src/To.Be.Generated/VectorStoreFileBatchOperationUpdateEnumerator.cs b/src/To.Be.Generated/VectorStoreFileBatchOperationUpdateEnumerator.cs new file mode 100644 index 000000000..c901c63d7 --- /dev/null +++ b/src/To.Be.Generated/VectorStoreFileBatchOperationUpdateEnumerator.cs @@ -0,0 +1,54 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; + +#nullable enable + +namespace OpenAI.VectorStores; + +internal partial class VectorStoreFileBatchOperationUpdateEnumerator : + IAsyncEnumerator>, + IEnumerator> +{ + #region IEnumerator> methods + + ClientResult IEnumerator>.Current + { + get + { + if (Current is null) + { + return default!; + } + + return GetUpdateFromResult(Current); + } + } + + #endregion + + #region IAsyncEnumerator> methods + + ClientResult IAsyncEnumerator>.Current + { + get + { + if (Current is null) + { + return default!; + } + + return GetUpdateFromResult(Current); + } + } + + #endregion + + // Methods used by convenience implementation + private ClientResult GetUpdateFromResult(ClientResult result) + { + PipelineResponse response = result.GetRawResponse(); + VectorStoreBatchFileJob run = VectorStoreBatchFileJob.FromResponse(response); + return ClientResult.FromValue(run, response); + } +} diff --git a/src/To.Be.Generated/Internal/PageCollectionHelpers.cs b/src/Utility/PageCollectionHelpers.cs similarity index 77% rename from src/To.Be.Generated/Internal/PageCollectionHelpers.cs rename to src/Utility/PageCollectionHelpers.cs index b5be39a6e..f7863ce21 100644 --- a/src/To.Be.Generated/Internal/PageCollectionHelpers.cs +++ b/src/Utility/PageCollectionHelpers.cs @@ -15,22 +15,6 @@ public static PageCollection Create(PageEnumerator enumerator) public static AsyncPageCollection CreateAsync(PageEnumerator enumerator) => new AsyncEnumeratorPageCollection(enumerator); - public static IEnumerable Create(PageResultEnumerator enumerator) - { - while (enumerator.MoveNext()) - { - yield return enumerator.Current; - } - } - - public static async IAsyncEnumerable CreateAsync(PageResultEnumerator enumerator) - { - while (await enumerator.MoveNextAsync().ConfigureAwait(false)) - { - yield return enumerator.Current; - } - } - private class EnumeratorPageCollection : PageCollection { private readonly PageEnumerator _enumerator; diff --git a/src/To.Be.Generated/Internal/PageEnumerator.cs b/src/Utility/PageEnumerator.cs similarity index 100% rename from src/To.Be.Generated/Internal/PageEnumerator.cs rename to src/Utility/PageEnumerator.cs diff --git a/src/To.Be.Generated/Internal/PageResultEnumerator.cs b/src/Utility/PageResultEnumerator.cs similarity index 100% rename from src/To.Be.Generated/Internal/PageResultEnumerator.cs rename to src/Utility/PageResultEnumerator.cs diff --git a/src/Utility/Polyfill/System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute.cs b/src/Utility/Polyfill/System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute.cs index 1b9abe47c..b4aa9161f 100644 --- a/src/Utility/Polyfill/System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute.cs +++ b/src/Utility/Polyfill/System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute.cs @@ -6,7 +6,7 @@ namespace System.Runtime.CompilerServices; internal sealed class CompilerFeatureRequiredAttribute(string featureName) : Attribute { public string FeatureName { get; } = featureName; - public bool IsOptional { get; init; } + public bool IsOptional { get; set; } public const string RefStructs = nameof(RefStructs); public const string RequiredMembers = nameof(RequiredMembers); diff --git a/tests/Assistants/AssistantSmokeTests.cs b/tests/Assistants/AssistantSmokeTests.cs new file mode 100644 index 000000000..86aa427f8 --- /dev/null +++ b/tests/Assistants/AssistantSmokeTests.cs @@ -0,0 +1,73 @@ +using NUnit.Framework; +using OpenAI.Assistants; +using OpenAI.Files; +using OpenAI.VectorStores; +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using static OpenAI.Tests.TestHelpers; + +namespace OpenAI.Tests.Assistants; + +#pragma warning disable OPENAI001 + +[Parallelizable(ParallelScope.Fixtures)] +[Category("Assistants")] +[Category("Smoke")] +public partial class AssistantSmokeTests +{ + [Test] + public void RunStepDeserialization() + { + BinaryData runStepData = BinaryData.FromString( + """ + { + "id": "step_Ksdfr5ooy26sayKbIQu2d2Vb", + "object": "thread.run.step", + "created_at": 1718906747, + "run_id": "run_vvuLqtPTte9qCnRb7a5MQPgB", + "assistant_id": "asst_UyBYTjqlwhSOdHOEzwwGZM6d", + "thread_id": "thread_lIk2yQzSGHzXrzA4K6N8uPae", + "type": "tool_calls", + "status": "completed", + "cancelled_at": null, + "completed_at": 1718906749, + "expires_at": null, + "failed_at": null, + "last_error": null, + "step_details": { + "type": "tool_calls", + "tool_calls": [ + { + "id": "call_DUP8WOybwaxKcMoxtr6cJDw1", + "type": "code_interpreter", + "code_interpreter": { + "input": "# Let's read the content of the uploaded file to understand its content.\r\nfile_path = '/mnt/data/assistant-SvXXKd0VKpGbVq9rBDlvZTn0'\r\nwith open(file_path, 'r') as file:\r\n content = file.read()\r\n\r\n# Output the first few lines of the file to understand its structure and content\r\ncontent[:2000]", + "outputs": [ + { + "type": "logs", + "logs": "'Index,Value\\nIndex #1,1\\nIndex #2,4\\nIndex #3,9\\nIndex #4,16\\nIndex #5,25\\nIndex #6,36\\nIndex #7,49\\nIndex #8,64\\nIndex #9,81\\nIndex #10,100\\nIndex #11,121\\nIndex #12,144\\nIndex #13,169\\nIndex #14,196\\nIndex #15,225\\nIndex #16,256\\nIndex #17,289\\nIndex #18,324\\nIndex #19,361\\nIndex #20,400\\nIndex #21,441\\nIndex #22,484\\nIndex #23,529\\nIndex #24,576\\nIndex #25,625\\nIndex #26,676\\nIndex #27,729\\nIndex #28,784\\nIndex #29,841\\nIndex #30,900\\nIndex #31,961\\nIndex #32,1024\\nIndex #33,1089\\nIndex #34,1156\\nIndex #35,1225\\nIndex #36,1296\\nIndex #37,1369\\nIndex #38,1444\\nIndex #39,1521\\nIndex #40,1600\\nIndex #41,1681\\nIndex #42,1764\\nIndex #43,1849\\nIndex #44,1936\\nIndex #45,2025\\nIndex #46,2116\\nIndex #47,2209\\nIndex #48,2304\\nIndex #49,2401\\nIndex #50,2500\\nIndex #51,2601\\nIndex #52,2704\\nIndex #53,2809\\nIndex #54,2916\\nIndex #55,3025\\nIndex #56,3136\\nIndex #57,3249\\nIndex #58,3364\\nIndex #59,3481\\nIndex #60,3600\\nIndex #61,3721\\nIndex #62,3844\\nIndex #63,3969\\nIndex #64,4096\\nIndex #65,4225\\nIndex #66,4356\\nIndex #67,4489\\nIndex #68,4624\\nIndex #69,4761\\nIndex #70,4900\\nIndex #71,5041\\nIndex #72,5184\\nIndex #73,5329\\nIndex #74,5476\\nIndex #75,5625\\nIndex #76,5776\\nIndex #77,5929\\nIndex #78,6084\\nIndex #79,6241\\nIndex #80,6400\\nIndex #81,6561\\nIndex #82,6724\\nIndex #83,6889\\nIndex #84,7056\\nIndex #85,7225\\nIndex #86,7396\\nIndex #87,7569\\nIndex #88,7744\\nIndex #89,7921\\nIndex #90,8100\\nIndex #91,8281\\nIndex #92,8464\\nIndex #93,8649\\nIndex #94,8836\\nIndex #95,9025\\nIndex #96,9216\\nIndex #97,9409\\nIndex #98,9604\\nIndex #99,9801\\nIndex #100,10000\\nIndex #101,10201\\nIndex #102,10404\\nIndex #103,10609\\nIndex #104,10816\\nIndex #105,11025\\nIndex #106,11236\\nIndex #107,11449\\nIndex #108,11664\\nIndex #109,11881\\nIndex #110,12100\\nIndex #111,12321\\nIndex #112,12544\\nIndex #113,12769\\nIndex #114,12996\\nIndex #115,13225\\nIndex #116,13456\\nIndex #117,13689\\nIndex #118,13924\\nIndex #119,14161\\nIndex #120,14400\\nIndex #121,14641\\nIndex #122,14884\\nIndex #123,15129\\nIndex #124,15376\\nIndex #125,15625\\nIndex #126,15876\\nIndex #127,16129\\nIndex #128,16384\\nIndex #129,16641\\nIndex #130,16900\\nIndex #131,17161\\nIndex #132,'" + } + ] + } + } + ] + }, + "usage": { + "prompt_tokens": 201, + "completion_tokens": 84, + "total_tokens": 285 + } + } + """); + RunStep deserializedRunStep = ModelReaderWriter.Read(runStepData); + Assert.That(deserializedRunStep.Id, Is.Not.Null.And.Not.Empty); + Assert.That(deserializedRunStep.AssistantId, Is.Not.Null.And.Not.Empty); + Assert.That(deserializedRunStep.Details, Is.Not.Null); + Assert.That(deserializedRunStep.Details.ToolCalls, Has.Count.EqualTo(1)); + Assert.That(deserializedRunStep.Details.ToolCalls[0].CodeInterpreterOutputs, Has.Count.EqualTo(1)); + Assert.That(deserializedRunStep.Details.ToolCalls[0].CodeInterpreterOutputs[0].Logs, Is.Not.Null.And.Not.Empty); + } +} + +#pragma warning restore OPENAI001 diff --git a/tests/Assistants/AssistantTests.cs b/tests/Assistants/AssistantTests.cs index 148508d94..b2aa2b4c5 100644 --- a/tests/Assistants/AssistantTests.cs +++ b/tests/Assistants/AssistantTests.cs @@ -8,7 +8,8 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using System.Threading; +using System.Net.ServerSentEvents; +using System.Text.Json; using System.Threading.Tasks; using static OpenAI.Tests.TestHelpers; @@ -17,13 +18,57 @@ namespace OpenAI.Tests.Assistants; #pragma warning disable OPENAI001 [Parallelizable(ParallelScope.Fixtures)] +[Category("Assistants")] public partial class AssistantTests { + [OneTimeTearDown] + protected void Cleanup() + { + // Skip cleanup if there is no API key (e.g., if we are not running live tests). + if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("OPEN_API_KEY"))) + { + return; + } + + AssistantClient client = new(); + FileClient fileClient = new(); + VectorStoreClient vectorStoreClient = new(); + RequestOptions requestOptions = new() + { + ErrorOptions = ClientErrorBehaviors.NoThrow, + }; + foreach (ThreadMessage message in _messagesToDelete) + { + Console.WriteLine($"Cleanup: {message.Id} -> {client.DeleteMessage(message.ThreadId, message.Id, requestOptions)?.GetRawResponse().Status}"); + } + foreach (Assistant assistant in _assistantsToDelete) + { + Console.WriteLine($"Cleanup: {assistant.Id} -> {client.DeleteAssistant(assistant.Id, requestOptions)?.GetRawResponse().Status}"); + } + foreach (AssistantThread thread in _threadsToDelete) + { + Console.WriteLine($"Cleanup: {thread.Id} -> {client.DeleteThread(thread.Id, requestOptions)?.GetRawResponse().Status}"); + } + foreach (OpenAIFileInfo file in _filesToDelete) + { + Console.WriteLine($"Cleanup: {file.Id} -> {fileClient.DeleteFile(file.Id, requestOptions)?.GetRawResponse().Status}"); + } + foreach (string vectorStoreId in _vectorStoreIdsToDelete) + { + Console.WriteLine($"Cleanup: {vectorStoreId} => {vectorStoreClient.DeleteVectorStore(vectorStoreId, requestOptions)?.GetRawResponse().Status}"); + } + _messagesToDelete.Clear(); + _assistantsToDelete.Clear(); + _threadsToDelete.Clear(); + _filesToDelete.Clear(); + _vectorStoreIdsToDelete.Clear(); + } + [Test] public void BasicAssistantOperationsWork() { AssistantClient client = GetTestClient(); - Assistant assistant = client.CreateAssistant("gpt-3.5-turbo"); + Assistant assistant = client.CreateAssistant("gpt-4o-mini"); Validate(assistant); Assert.That(assistant.Name, Is.Null.Or.Empty); assistant = client.ModifyAssistant(assistant.Id, new AssistantModificationOptions() @@ -34,7 +79,7 @@ public void BasicAssistantOperationsWork() bool deleted = client.DeleteAssistant(assistant.Id); Assert.That(deleted, Is.True); _assistantsToDelete.Remove(assistant); - assistant = client.CreateAssistant("gpt-3.5-turbo", new AssistantCreationOptions() + assistant = client.CreateAssistant("gpt-4o-mini", new AssistantCreationOptions() { Metadata = { @@ -178,7 +223,7 @@ public void ThreadWithInitialMessagesWorks() public void BasicRunOperationsWork() { AssistantClient client = GetTestClient(); - Assistant assistant = client.CreateAssistant("gpt-3.5-turbo"); + Assistant assistant = client.CreateAssistant("gpt-4o-mini"); Validate(assistant); AssistantThread thread = client.CreateThread(); Validate(thread); @@ -186,23 +231,25 @@ public void BasicRunOperationsWork() Assert.That(runsPage.Values.Count, Is.EqualTo(0)); ThreadMessage message = client.CreateMessage(thread.Id, MessageRole.User, ["Hello, assistant!"]); Validate(message); - ThreadRun run = client.CreateRun(thread.Id, assistant.Id); - Validate(run); - Assert.That(run.Status, Is.EqualTo(RunStatus.Queued)); - Assert.That(run.CreatedAt, Is.GreaterThan(s_2024)); - ThreadRun retrievedRun = client.GetRun(thread.Id, run.Id); - Assert.That(retrievedRun.Id, Is.EqualTo(run.Id)); + RunOperation runOperation = client.CreateRun(ReturnWhen.Started, thread.Id, assistant.Id); + Validate(runOperation); + Assert.That(runOperation.Status, Is.EqualTo(RunStatus.Queued)); + Assert.That(runOperation.Value.CreatedAt, Is.GreaterThan(s_2024)); + Assert.That(runOperation.IsCompleted, Is.False); + //ThreadRun retrievedRun = client.GetRun(thread.Id, run.Id); + //Assert.That(retrievedRun.Id, Is.EqualTo(run.Id)); runsPage = client.GetRuns(thread).GetCurrentPage(); Assert.That(runsPage.Values.Count, Is.EqualTo(1)); - Assert.That(runsPage.Values[0].Id, Is.EqualTo(run.Id)); + Assert.That(runsPage.Values[0].Id, Is.EqualTo(runOperation.RunId)); PageResult messagesPage = client.GetMessages(thread).GetCurrentPage(); Assert.That(messagesPage.Values.Count, Is.GreaterThanOrEqualTo(1)); - for (int i = 0; i < 10 && !run.Status.IsTerminal; i++) - { - Thread.Sleep(500); - run = client.GetRun(run); - } + + runOperation.WaitUntilStopped(); + Assert.That(runOperation.IsCompleted, Is.True); + + ThreadRun run = runOperation.Value; + Assert.That(run.Status, Is.EqualTo(RunStatus.Completed)); Assert.That(run.CompletedAt, Is.GreaterThan(s_2024)); Assert.That(run.RequiredActions.Count, Is.EqualTo(0)); @@ -222,7 +269,7 @@ public void BasicRunOperationsWork() public void BasicRunStepFunctionalityWorks() { AssistantClient client = GetTestClient(); - Assistant assistant = client.CreateAssistant("gpt-4o", new AssistantCreationOptions() + Assistant assistant = client.CreateAssistant("gpt-4o-mini", new AssistantCreationOptions() { Tools = { new CodeInterpreterToolDefinition() }, Instructions = "You help the user with mathematical descriptions and visualizations.", @@ -259,18 +306,17 @@ public void BasicRunStepFunctionalityWorks() }); Validate(thread); - ThreadRun run = client.CreateRun(thread, assistant); - Validate(run); + RunOperation runOperation = client.CreateRun(ReturnWhen.Started, thread, assistant); + Validate(runOperation); - while (!run.Status.IsTerminal) - { - Thread.Sleep(1000); - run = client.GetRun(run); - } + runOperation.WaitUntilStopped(); + Assert.That(runOperation.IsCompleted, Is.True); + + ThreadRun run = runOperation.Value; Assert.That(run.Status, Is.EqualTo(RunStatus.Completed)); Assert.That(run.Usage?.TotalTokens, Is.GreaterThan(0)); - PageCollection pages = client.GetRunSteps(run); + PageCollection pages = runOperation.GetRunSteps(); PageResult firstPage = pages.GetCurrentPage(); RunStep firstStep = firstPage.Values[0]; RunStep secondStep = firstPage.Values[1]; @@ -305,7 +351,7 @@ public void BasicRunStepFunctionalityWorks() public void SettingResponseFormatWorks() { AssistantClient client = GetTestClient(); - Assistant assistant = client.CreateAssistant("gpt-4-turbo", new() + Assistant assistant = client.CreateAssistant("gpt-4o-mini", new() { ResponseFormat = AssistantResponseFormat.JsonObject, }); @@ -320,19 +366,19 @@ public void SettingResponseFormatWorks() Validate(thread); ThreadMessage message = client.CreateMessage(thread, MessageRole.User, ["Write some JSON for me!"]); Validate(message); - ThreadRun run = client.CreateRun(thread, assistant, new() + RunOperation runOperation = client.CreateRun(ReturnWhen.Completed, thread, assistant, new() { ResponseFormat = AssistantResponseFormat.JsonObject, }); - Validate(run); - Assert.That(run.ResponseFormat, Is.EqualTo(AssistantResponseFormat.JsonObject)); + Validate(runOperation); + Assert.That(runOperation.Value.ResponseFormat, Is.EqualTo(AssistantResponseFormat.JsonObject)); } [Test] public void FunctionToolsWork() { AssistantClient client = GetTestClient(); - Assistant assistant = client.CreateAssistant("gpt-3.5-turbo", new AssistantCreationOptions() + Assistant assistant = client.CreateAssistant("gpt-4o-mini", new AssistantCreationOptions() { Tools = { @@ -362,7 +408,8 @@ public void FunctionToolsWork() Assert.That(responseToolDefinition?.FunctionName, Is.EqualTo("get_favorite_food_for_day_of_week")); Assert.That(responseToolDefinition?.Parameters, Is.Not.Null); - ThreadRun run = client.CreateThreadAndRun( + RunOperation runOperation = client.CreateThreadAndRun( + ReturnWhen.Started, assistant, new ThreadCreationOptions() { @@ -372,28 +419,22 @@ public void FunctionToolsWork() { AdditionalInstructions = "Call provided tools when appropriate.", }); - Validate(run); + Validate(runOperation); - for (int i = 0; i < 10 && !run.Status.IsTerminal; i++) - { - Thread.Sleep(500); - run = client.GetRun(run); - } - Assert.That(run.Status, Is.EqualTo(RunStatus.RequiresAction)); + runOperation.WaitUntilStopped(); + + ThreadRun run = runOperation.Value; + Assert.That(runOperation.Status, Is.EqualTo(RunStatus.RequiresAction)); Assert.That(run.RequiredActions?.Count, Is.EqualTo(1)); Assert.That(run.RequiredActions[0].ToolCallId, Is.Not.Null.And.Not.Empty); Assert.That(run.RequiredActions[0].FunctionName, Is.EqualTo("get_favorite_food_for_day_of_week")); Assert.That(run.RequiredActions[0].FunctionArguments, Is.Not.Null.And.Not.Empty); - run = client.SubmitToolOutputsToRun(run, [new(run.RequiredActions[0].ToolCallId, "tacos")]); - Assert.That(run.Status.IsTerminal, Is.False); + runOperation.SubmitToolOutputsToRun([new(run.RequiredActions[0].ToolCallId, "tacos")]); + Assert.That(runOperation.Status!.Value.IsTerminal, Is.False); - for (int i = 0; i < 10 && !run.Status.IsTerminal; i++) - { - Thread.Sleep(500); - run = client.GetRun(run); - } - Assert.That(run.Status, Is.EqualTo(RunStatus.Completed)); + runOperation.WaitUntilStopped(); + Assert.That(runOperation.Status, Is.EqualTo(RunStatus.Completed)); PageCollection messagePages = client.GetMessages(run.ThreadId, new MessageCollectionOptions() { Order = ListOrder.NewestFirst }); PageResult firstPage = messagePages.GetCurrentPage(); @@ -407,7 +448,7 @@ public void FunctionToolsWork() public async Task StreamingRunWorks() { AssistantClient client = new(); - Assistant assistant = await client.CreateAssistantAsync("gpt-3.5-turbo"); + Assistant assistant = await client.CreateAssistantAsync("gpt-4o-mini"); Validate(assistant); AssistantThread thread = await client.CreateThreadAsync(new ThreadCreationOptions() @@ -419,12 +460,11 @@ public async Task StreamingRunWorks() Stopwatch stopwatch = Stopwatch.StartNew(); void Print(string message) => Console.WriteLine($"[{stopwatch.ElapsedMilliseconds,6}] {message}"); - AsyncCollectionResult streamingResult - = client.CreateRunStreamingAsync(thread.Id, assistant.Id); + StreamingRunOperation streamingRunOperation = client.CreateRunStreaming(thread.Id, assistant.Id); Print(">>> Connected <<<"); - await foreach (StreamingUpdate update in streamingResult) + await foreach (StreamingUpdate update in streamingRunOperation.GetUpdatesStreamingAsync()) { string message = $"{update.UpdateKind} "; if (update is RunUpdate runUpdate) @@ -456,7 +496,7 @@ public async Task StreamingToolCall() { AssistantClient client = GetTestClient(); FunctionToolDefinition getWeatherTool = new("get_current_weather", "Gets the user's current weather"); - Assistant assistant = await client.CreateAssistantAsync("gpt-3.5-turbo", new() + Assistant assistant = await client.CreateAssistantAsync("gpt-4o-mini", new() { Tools = { getWeatherTool } }); @@ -466,7 +506,7 @@ public async Task StreamingToolCall() void Print(string message) => Console.WriteLine($"[{stopwatch.ElapsedMilliseconds,6}] {message}"); Print(" >>> Beginning call ... "); - AsyncCollectionResult asyncResults = client.CreateThreadAndRunStreamingAsync( + StreamingRunOperation streamingRunOperation = client.CreateThreadAndRunStreaming( assistant, new() { @@ -474,39 +514,33 @@ public async Task StreamingToolCall() }); Print(" >>> Starting enumeration ..."); - ThreadRun run = null; - - do + await foreach (StreamingUpdate update in streamingRunOperation.GetUpdatesStreamingAsync()) { - run = null; - List toolOutputs = []; - await foreach (StreamingUpdate update in asyncResults) + string message = update.UpdateKind.ToString(); + + if (update is RunUpdate runUpdate) { - string message = update.UpdateKind.ToString(); + message += $" run_id:{runUpdate.Value.Id}"; + } + if (update is RequiredActionUpdate requiredActionUpdate) + { + RequiredAction action = requiredActionUpdate.RequiredActions.First(); + Assert.That(action.FunctionName, Is.EqualTo(getWeatherTool.FunctionName)); + Assert.That(requiredActionUpdate.GetThreadRun().Status, Is.EqualTo(RunStatus.RequiresAction)); + message += $" {action.FunctionName}"; - if (update is RunUpdate runUpdate) - { - message += $" run_id:{runUpdate.Value.Id}"; - run = runUpdate.Value; - } - if (update is RequiredActionUpdate requiredActionUpdate) - { - Assert.That(requiredActionUpdate.FunctionName, Is.EqualTo(getWeatherTool.FunctionName)); - Assert.That(requiredActionUpdate.GetThreadRun().Status, Is.EqualTo(RunStatus.RequiresAction)); - message += $" {requiredActionUpdate.FunctionName}"; - toolOutputs.Add(new(requiredActionUpdate.ToolCallId, "warm and sunny")); - } - if (update is MessageContentUpdate contentUpdate) - { - message += $" {contentUpdate.Text}"; - } - Print(message); + List toolOutputs = []; + + toolOutputs.Add(new(action.ToolCallId, "warm and sunny")); + + await streamingRunOperation.SubmitToolOutputsToRunStreamingAsync(toolOutputs); } - if (toolOutputs.Count > 0) + if (update is MessageContentUpdate contentUpdate) { - asyncResults = client.SubmitToolOutputsToRunStreamingAsync(run, toolOutputs); + message += $" {contentUpdate.Text}"; } - } while (run?.Status.IsTerminal == false); + Print(message); + } } [Test] @@ -529,7 +563,7 @@ This file describes the favorite foods of several people. AssistantClient client = GetTestClient(); // Create an assistant, using the creation helper to make a new vector store - Assistant assistant = client.CreateAssistant("gpt-4-turbo", new() + Assistant assistant = client.CreateAssistant("gpt-4o-mini", new() { Tools = { new FileSearchToolDefinition() }, ToolResources = new() @@ -596,15 +630,9 @@ This file describes the favorite foods of several people. Assert.That(thread.ToolResources?.FileSearch?.VectorStoreIds, Has.Count.EqualTo(1)); Assert.That(thread.ToolResources.FileSearch.VectorStoreIds[0], Is.EqualTo(createdVectorStoreId)); - ThreadRun run = client.CreateRun(thread, assistant); - Validate(run); - do - { - Thread.Sleep(1000); - run = client.GetRun(run); - } while (run?.Status.IsTerminal == false); - Assert.That(run.Status, Is.EqualTo(RunStatus.Completed)); - + RunOperation runOperation = client.CreateRun(ReturnWhen.Completed, thread, assistant); + Validate(runOperation); + IEnumerable messages = client.GetMessages(thread, new() { Order = ListOrder.NewestFirst }).GetAllValues(); int messageCount = 0; bool hasCake = false; @@ -638,7 +666,7 @@ public async Task Pagination_CanEnumerateAssistants() // Create assistant collection for (int i = 0; i < 10; i++) { - Assistant assistant = client.CreateAssistant("gpt-3.5-turbo", new AssistantCreationOptions() + Assistant assistant = client.CreateAssistant("gpt-4o-mini", new AssistantCreationOptions() { Name = $"Test Assistant {i}", }); @@ -679,7 +707,7 @@ public async Task Pagination_CanPageThroughAssistantCollection() // Create assistant collection for (int i = 0; i < 10; i++) { - Assistant assistant = client.CreateAssistant("gpt-3.5-turbo", new AssistantCreationOptions() + Assistant assistant = client.CreateAssistant("gpt-4o-mini", new AssistantCreationOptions() { Name = $"Test Assistant {i}" }); @@ -732,7 +760,7 @@ public async Task Pagination_CanRehydrateAssistantPageCollectionFromBytes() // Create assistant collection for (int i = 0; i < 10; i++) { - Assistant assistant = client.CreateAssistant("gpt-3.5-turbo", new AssistantCreationOptions() + Assistant assistant = client.CreateAssistant("gpt-4o-mini", new AssistantCreationOptions() { Name = $"Test Assistant {i}" }); @@ -790,7 +818,7 @@ public async Task Pagination_CanRehydrateAssistantPageCollectionFromPageToken() // Create assistant collection for (int i = 0; i < 10; i++) { - Assistant assistant = client.CreateAssistant("gpt-3.5-turbo", new AssistantCreationOptions() + Assistant assistant = client.CreateAssistant("gpt-4o-mini", new AssistantCreationOptions() { Name = $"Test Assistant {i}" }); @@ -846,7 +874,7 @@ public async Task Pagination_CanCastAssistantPageCollectionToConvenienceFromProt // Create assistant collection for (int i = 0; i < 10; i++) { - Assistant assistant = client.CreateAssistant("gpt-3.5-turbo", new AssistantCreationOptions() + Assistant assistant = client.CreateAssistant("gpt-4o-mini", new AssistantCreationOptions() { Name = $"Test Assistant {i}" }); @@ -889,87 +917,87 @@ public async Task Pagination_CanCastAssistantPageCollectionToConvenienceFromProt Assert.That(pageCount, Is.GreaterThanOrEqualTo(5)); } - [Test] - public void Pagination_CanRehydrateRunStepPageCollectionFromBytes() - { - AssistantClient client = GetTestClient(); - Assistant assistant = client.CreateAssistant("gpt-4o", new AssistantCreationOptions() - { - Tools = { new CodeInterpreterToolDefinition() }, - Instructions = "You help the user with mathematical descriptions and visualizations.", - }); - Validate(assistant); - - FileClient fileClient = new(); - OpenAIFileInfo equationFile = fileClient.UploadFile( - BinaryData.FromString(""" - x,y - 2,5 - 7,14, - 8,22 - """).ToStream(), - "text/csv", - FileUploadPurpose.Assistants); - Validate(equationFile); - - AssistantThread thread = client.CreateThread(new ThreadCreationOptions() - { - InitialMessages = - { - "Describe the contents of any available tool resource file." - + " Graph a linear regression and provide the coefficient of correlation." - + " Explain any code executed to evaluate.", - }, - ToolResources = new() - { - CodeInterpreter = new() - { - FileIds = { equationFile.Id }, - } - } - }); - Validate(thread); - - ThreadRun run = client.CreateRun(thread, assistant); - Validate(run); - - while (!run.Status.IsTerminal) - { - Thread.Sleep(1000); - run = client.GetRun(run); - } - Assert.That(run.Status, Is.EqualTo(RunStatus.Completed)); - Assert.That(run.Usage?.TotalTokens, Is.GreaterThan(0)); - - PageCollection pages = client.GetRunSteps(run); - IEnumerator> pageEnumerator = ((IEnumerable>)pages).GetEnumerator(); - - // Simulate rehydration of the collection - BinaryData rehydrationBytes = pages.GetCurrentPage().PageToken.ToBytes(); - ContinuationToken rehydrationToken = ContinuationToken.FromBytes(rehydrationBytes); - - PageCollection rehydratedPages = client.GetRunSteps(rehydrationToken); - IEnumerator> rehydratedPageEnumerator = ((IEnumerable>)rehydratedPages).GetEnumerator(); - - int pageCount = 0; - - while (pageEnumerator.MoveNext() && rehydratedPageEnumerator.MoveNext()) - { - PageResult page = pageEnumerator.Current; - PageResult rehydratedPage = rehydratedPageEnumerator.Current; - - Assert.AreEqual(page.Values.Count, rehydratedPage.Values.Count); - - for (int i = 0; i < page.Values.Count; i++) - { - Assert.AreEqual(page.Values[0].Id, rehydratedPage.Values[0].Id); - } - - pageCount++; - } - - Assert.That(pageCount, Is.GreaterThanOrEqualTo(1)); - } + //[Test] + //public void Pagination_CanRehydrateRunStepPageCollectionFromBytes() + //{ + // AssistantClient client = GetTestClient(); + // Assistant assistant = client.CreateAssistant("gpt-4o", new AssistantCreationOptions() + // { + // Tools = { new CodeInterpreterToolDefinition() }, + // Instructions = "You help the user with mathematical descriptions and visualizations.", + // }); + // Validate(assistant); + + // FileClient fileClient = new(); + // OpenAIFileInfo equationFile = fileClient.UploadFile( + // BinaryData.FromString(""" + // x,y + // 2,5 + // 7,14, + // 8,22 + // """).ToStream(), + // "text/csv", + // FileUploadPurpose.Assistants); + // Validate(equationFile); + + // AssistantThread thread = client.CreateThread(new ThreadCreationOptions() + // { + // InitialMessages = + // { + // "Describe the contents of any available tool resource file." + // + " Graph a linear regression and provide the coefficient of correlation." + // + " Explain any code executed to evaluate.", + // }, + // ToolResources = new() + // { + // CodeInterpreter = new() + // { + // FileIds = { equationFile.Id }, + // } + // } + // }); + // Validate(thread); + + // ThreadRun run = client.CreateRun(thread, assistant); + // Validate(run); + + // while (!run.Status.IsTerminal) + // { + // Thread.Sleep(1000); + // run = client.GetRun(run); + // } + // Assert.That(run.Status, Is.EqualTo(RunStatus.Completed)); + // Assert.That(run.Usage?.TotalTokens, Is.GreaterThan(0)); + + // PageCollection pages = client.GetRunSteps(run); + // IEnumerator> pageEnumerator = ((IEnumerable>)pages).GetEnumerator(); + + // // Simulate rehydration of the collection + // BinaryData rehydrationBytes = pages.GetCurrentPage().PageToken.ToBytes(); + // ContinuationToken rehydrationToken = ContinuationToken.FromBytes(rehydrationBytes); + + // PageCollection rehydratedPages = client.GetRunSteps(rehydrationToken); + // IEnumerator> rehydratedPageEnumerator = ((IEnumerable>)rehydratedPages).GetEnumerator(); + + // int pageCount = 0; + + // while (pageEnumerator.MoveNext() && rehydratedPageEnumerator.MoveNext()) + // { + // PageResult page = pageEnumerator.Current; + // PageResult rehydratedPage = rehydratedPageEnumerator.Current; + + // Assert.AreEqual(page.Values.Count, rehydratedPage.Values.Count); + + // for (int i = 0; i < page.Values.Count; i++) + // { + // Assert.AreEqual(page.Values[0].Id, rehydratedPage.Values[0].Id); + // } + + // pageCount++; + // } + + // Assert.That(pageCount, Is.GreaterThanOrEqualTo(1)); + //} [Test] public async Task MessagesWithRoles() @@ -1027,104 +1055,931 @@ async Task RefreshMessageListAsync() Assert.That(messages[2].Content[0].Text, Is.EqualTo(assistantMessageText)); } + #region LRO Tests + [Test] - [Category("smoke")] - public void RunStepDeserialization() + public void LRO_ProtocolOnly_Polling_CanWaitForThreadRunToComplete() { - BinaryData runStepData = BinaryData.FromString( - """ - { - "id": "step_Ksdfr5ooy26sayKbIQu2d2Vb", - "object": "thread.run.step", - "created_at": 1718906747, - "run_id": "run_vvuLqtPTte9qCnRb7a5MQPgB", - "assistant_id": "asst_UyBYTjqlwhSOdHOEzwwGZM6d", - "thread_id": "thread_lIk2yQzSGHzXrzA4K6N8uPae", - "type": "tool_calls", - "status": "completed", - "cancelled_at": null, - "completed_at": 1718906749, - "expires_at": null, - "failed_at": null, - "last_error": null, - "step_details": { - "type": "tool_calls", - "tool_calls": [ - { - "id": "call_DUP8WOybwaxKcMoxtr6cJDw1", - "type": "code_interpreter", - "code_interpreter": { - "input": "# Let's read the content of the uploaded file to understand its content.\r\nfile_path = '/mnt/data/assistant-SvXXKd0VKpGbVq9rBDlvZTn0'\r\nwith open(file_path, 'r') as file:\r\n content = file.read()\r\n\r\n# Output the first few lines of the file to understand its structure and content\r\ncontent[:2000]", - "outputs": [ - { - "type": "logs", - "logs": "'Index,Value\\nIndex #1,1\\nIndex #2,4\\nIndex #3,9\\nIndex #4,16\\nIndex #5,25\\nIndex #6,36\\nIndex #7,49\\nIndex #8,64\\nIndex #9,81\\nIndex #10,100\\nIndex #11,121\\nIndex #12,144\\nIndex #13,169\\nIndex #14,196\\nIndex #15,225\\nIndex #16,256\\nIndex #17,289\\nIndex #18,324\\nIndex #19,361\\nIndex #20,400\\nIndex #21,441\\nIndex #22,484\\nIndex #23,529\\nIndex #24,576\\nIndex #25,625\\nIndex #26,676\\nIndex #27,729\\nIndex #28,784\\nIndex #29,841\\nIndex #30,900\\nIndex #31,961\\nIndex #32,1024\\nIndex #33,1089\\nIndex #34,1156\\nIndex #35,1225\\nIndex #36,1296\\nIndex #37,1369\\nIndex #38,1444\\nIndex #39,1521\\nIndex #40,1600\\nIndex #41,1681\\nIndex #42,1764\\nIndex #43,1849\\nIndex #44,1936\\nIndex #45,2025\\nIndex #46,2116\\nIndex #47,2209\\nIndex #48,2304\\nIndex #49,2401\\nIndex #50,2500\\nIndex #51,2601\\nIndex #52,2704\\nIndex #53,2809\\nIndex #54,2916\\nIndex #55,3025\\nIndex #56,3136\\nIndex #57,3249\\nIndex #58,3364\\nIndex #59,3481\\nIndex #60,3600\\nIndex #61,3721\\nIndex #62,3844\\nIndex #63,3969\\nIndex #64,4096\\nIndex #65,4225\\nIndex #66,4356\\nIndex #67,4489\\nIndex #68,4624\\nIndex #69,4761\\nIndex #70,4900\\nIndex #71,5041\\nIndex #72,5184\\nIndex #73,5329\\nIndex #74,5476\\nIndex #75,5625\\nIndex #76,5776\\nIndex #77,5929\\nIndex #78,6084\\nIndex #79,6241\\nIndex #80,6400\\nIndex #81,6561\\nIndex #82,6724\\nIndex #83,6889\\nIndex #84,7056\\nIndex #85,7225\\nIndex #86,7396\\nIndex #87,7569\\nIndex #88,7744\\nIndex #89,7921\\nIndex #90,8100\\nIndex #91,8281\\nIndex #92,8464\\nIndex #93,8649\\nIndex #94,8836\\nIndex #95,9025\\nIndex #96,9216\\nIndex #97,9409\\nIndex #98,9604\\nIndex #99,9801\\nIndex #100,10000\\nIndex #101,10201\\nIndex #102,10404\\nIndex #103,10609\\nIndex #104,10816\\nIndex #105,11025\\nIndex #106,11236\\nIndex #107,11449\\nIndex #108,11664\\nIndex #109,11881\\nIndex #110,12100\\nIndex #111,12321\\nIndex #112,12544\\nIndex #113,12769\\nIndex #114,12996\\nIndex #115,13225\\nIndex #116,13456\\nIndex #117,13689\\nIndex #118,13924\\nIndex #119,14161\\nIndex #120,14400\\nIndex #121,14641\\nIndex #122,14884\\nIndex #123,15129\\nIndex #124,15376\\nIndex #125,15625\\nIndex #126,15876\\nIndex #127,16129\\nIndex #128,16384\\nIndex #129,16641\\nIndex #130,16900\\nIndex #131,17161\\nIndex #132,'" - } - ] - } - } - ] - }, - "usage": { - "prompt_tokens": 201, - "completion_tokens": 84, - "total_tokens": 285 - } - } - """); - RunStep deserializedRunStep = ModelReaderWriter.Read(runStepData); - Assert.That(deserializedRunStep.Id, Is.Not.Null.And.Not.Empty); - Assert.That(deserializedRunStep.AssistantId, Is.Not.Null.And.Not.Empty); - Assert.That(deserializedRunStep.Details, Is.Not.Null); - Assert.That(deserializedRunStep.Details.ToolCalls, Has.Count.EqualTo(1)); - Assert.That(deserializedRunStep.Details.ToolCalls[0].CodeInterpreterOutputs, Has.Count.EqualTo(1)); - Assert.That(deserializedRunStep.Details.ToolCalls[0].CodeInterpreterOutputs[0].Logs, Is.Not.Null.And.Not.Empty); + AssistantClient client = GetTestClient(); + Assistant assistant = client.CreateAssistant("gpt-3.5-turbo"); + Validate(assistant); + AssistantThread thread = client.CreateThread(); + Validate(thread); + PageResult runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(0)); + ThreadMessage message = client.CreateMessage(thread.Id, MessageRole.User, ["Hello, assistant!"]); + Validate(message); + + string json = $"{{\"assistant_id\":\"{assistant.Id}\"}}"; + BinaryContent content = BinaryContent.Create(BinaryData.FromString(json)); + + RunOperation runOperation = client.CreateRun(ReturnWhen.Started, thread.Id, content); + + PipelineResponse response = runOperation.GetRawResponse(); + using JsonDocument createdJsonDoc = JsonDocument.Parse(response.Content); + string runId = createdJsonDoc.RootElement.GetProperty("id"u8).GetString()!; + + runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(1)); + Assert.That(runsPage.Values[0].Id, Is.EqualTo(runId)); + + PageResult messagesPage = client.GetMessages(thread).GetCurrentPage(); + Assert.That(messagesPage.Values.Count, Is.GreaterThanOrEqualTo(1)); + + runOperation.WaitUntilStopped(); + + response = runOperation.GetRawResponse(); + using JsonDocument completedJsonDoc = JsonDocument.Parse(response.Content); + string status = completedJsonDoc.RootElement.GetProperty("status"u8).GetString()!; + + Assert.That(status, Is.EqualTo(RunStatus.Completed.ToString())); + Assert.That(runOperation.IsCompleted, Is.True); + + messagesPage = client.GetMessages(thread).GetCurrentPage(); + Assert.That(messagesPage.Values.Count, Is.EqualTo(2)); + + Assert.That(messagesPage.Values[0].Role, Is.EqualTo(MessageRole.Assistant)); + Assert.That(messagesPage.Values[1].Role, Is.EqualTo(MessageRole.User)); + Assert.That(messagesPage.Values[1].Id, Is.EqualTo(message.Id)); } - [OneTimeTearDown] - protected void Cleanup() + [Test] + public async Task LRO_ProtocolOnly_Streaming_CanWaitForThreadRunToComplete() { - // Skip cleanup if there is no API key (e.g., if we are not running live tests). - if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("OPEN_API_KEY"))) - { - return; - } + AssistantClient client = GetTestClient(); + Assistant assistant = client.CreateAssistant("gpt-3.5-turbo"); + Validate(assistant); + AssistantThread thread = client.CreateThread(); + Validate(thread); + PageResult runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(0)); + ThreadMessage message = client.CreateMessage(thread.Id, MessageRole.User, ["Hello, assistant!"]); + Validate(message); - AssistantClient client = new(); - FileClient fileClient = new(); - VectorStoreClient vectorStoreClient = new(); - RequestOptions requestOptions = new() - { - ErrorOptions = ClientErrorBehaviors.NoThrow, - }; - foreach (ThreadMessage message in _messagesToDelete) - { - Console.WriteLine($"Cleanup: {message.Id} -> {client.DeleteMessage(message.ThreadId, message.Id, requestOptions)?.GetRawResponse().Status}"); - } - foreach (Assistant assistant in _assistantsToDelete) - { - Console.WriteLine($"Cleanup: {assistant.Id} -> {client.DeleteAssistant(assistant.Id, requestOptions)?.GetRawResponse().Status}"); - } - foreach (AssistantThread thread in _threadsToDelete) - { - Console.WriteLine($"Cleanup: {thread.Id} -> {client.DeleteThread(thread.Id, requestOptions)?.GetRawResponse().Status}"); - } - foreach (OpenAIFileInfo file in _filesToDelete) - { - Console.WriteLine($"Cleanup: {file.Id} -> {fileClient.DeleteFile(file.Id, requestOptions)?.GetRawResponse().Status}"); - } - foreach (string vectorStoreId in _vectorStoreIdsToDelete) + // Create streaming + string json = $"{{\"assistant_id\":\"{assistant.Id}\", \"stream\":true}}"; + BinaryContent content = BinaryContent.Create(BinaryData.FromString(json)); + RequestOptions options = new() { BufferResponse = false }; + + RunOperation runOperation = client.CreateRun(ReturnWhen.Started, thread.Id, content, options); + + // For streaming on protocol, if you call Wait, it will throw. + Assert.Throws(() => runOperation.WaitUntilStopped()); + + // Instead, callers must get the response stream and parse it. + PipelineResponse response = runOperation.GetRawResponse(); + IAsyncEnumerable> events = SseParser.Create( + response.ContentStream, + (_, bytes) => bytes.ToArray()).EnumerateAsync(); + + bool first = true; + string runId = default; + string status = default; + + PageResult messagesPage = default; + + await foreach (var sseItem in events) { - Console.WriteLine($"Cleanup: {vectorStoreId} => {vectorStoreClient.DeleteVectorStore(vectorStoreId, requestOptions)?.GetRawResponse().Status}"); + if (BinaryData.FromBytes(sseItem.Data).ToString() == "[DONE]") + { + continue; + } + + using JsonDocument doc = JsonDocument.Parse(sseItem.Data); + + if (first) + { + Assert.That(sseItem.EventType, Is.EqualTo("thread.run.created")); + + runId = doc.RootElement.GetProperty("id"u8).GetString()!; + + runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(1)); + Assert.That(runsPage.Values[0].Id, Is.EqualTo(runId)); + + messagesPage = client.GetMessages(thread).GetCurrentPage(); + Assert.That(messagesPage.Values.Count, Is.GreaterThanOrEqualTo(1)); + + first = false; + } + + string prefix = sseItem.EventType.AsSpan().Slice(0, 11).ToString(); + string suffix = sseItem.EventType.AsSpan().Slice(11).ToString(); + if (prefix == "thread.run." && !suffix.Contains("step.")) + { + status = doc.RootElement.GetProperty("status"u8).GetString()!; + + // Note: the below doesn't work because 'created' isn't a valid status. + //Assert.That(suffix, Is.EqualTo(status)); + } } - _messagesToDelete.Clear(); - _assistantsToDelete.Clear(); - _threadsToDelete.Clear(); - _filesToDelete.Clear(); - _vectorStoreIdsToDelete.Clear(); + + Assert.That(status, Is.EqualTo(RunStatus.Completed.ToString())); + + // For streaming on protocol, if you read IsCompleted, it will throw. + Assert.Throws(() => { bool b = runOperation.IsCompleted; }); + + messagesPage = client.GetMessages(thread).GetCurrentPage(); + Assert.That(messagesPage.Values.Count, Is.EqualTo(2)); + + Assert.That(messagesPage.Values[0].Role, Is.EqualTo(MessageRole.Assistant)); + Assert.That(messagesPage.Values[1].Role, Is.EqualTo(MessageRole.User)); + Assert.That(messagesPage.Values[1].Id, Is.EqualTo(message.Id)); } - /// + [Test] + public async Task LRO_ProtocolOnly_Streaming_CanCancelThreadRun() + { + AssistantClient client = GetTestClient(); + Assistant assistant = client.CreateAssistant("gpt-3.5-turbo"); + Validate(assistant); + AssistantThread thread = client.CreateThread(); + Validate(thread); + PageResult runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(0)); + ThreadMessage message = client.CreateMessage(thread.Id, MessageRole.User, ["Hello, assistant!"]); + Validate(message); + + string threadId = thread.Id; + string runId = default; + + // Create streaming + string json = $"{{\"assistant_id\":\"{assistant.Id}\", \"stream\":true}}"; + BinaryContent content = BinaryContent.Create(BinaryData.FromString(json)); + RequestOptions options = new() { BufferResponse = false }; + + RunOperation runOperation = client.CreateRun(ReturnWhen.Started, thread.Id, content, options); + + // Instead, callers must get the response stream and parse it. + PipelineResponse response = runOperation.GetRawResponse(); + IAsyncEnumerable> events = SseParser.Create( + response.ContentStream, + (_, bytes) => bytes.ToArray()).EnumerateAsync(); + + bool first = true; + string status = default; + + PageResult messagesPage = default; + + await foreach (var sseItem in events) + { + if (BinaryData.FromBytes(sseItem.Data).ToString() == "[DONE]") + { + continue; + } + + using JsonDocument doc = JsonDocument.Parse(sseItem.Data); + + if (first) + { + Assert.That(sseItem.EventType, Is.EqualTo("thread.run.created")); + + runId = doc.RootElement.GetProperty("id"u8).GetString()!; + + runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(1)); + Assert.That(runsPage.Values[0].Id, Is.EqualTo(runId)); + + messagesPage = client.GetMessages(thread).GetCurrentPage(); + Assert.That(messagesPage.Values.Count, Is.GreaterThanOrEqualTo(1)); + + first = false; + + // Cancel the run while reading the event stream + runOperation.CancelRun(threadId, runId, options: default); + } + + string prefix = sseItem.EventType.AsSpan().Slice(0, 11).ToString(); + string suffix = sseItem.EventType.AsSpan().Slice(11).ToString(); + if (prefix == "thread.run." && !suffix.Contains("step.")) + { + status = doc.RootElement.GetProperty("status"u8).GetString()!; + } + } + + Assert.That(status, Is.EqualTo(RunStatus.Cancelled.ToString())); + } + + [Test] + public async Task LRO_ProtocolOnly_Streaming_CanSubmitToolOutputs() + { + FunctionToolDefinition getTemperatureTool = new() + { + FunctionName = "get_current_temperature", + Description = "Gets the current temperature at a specific location.", + Parameters = BinaryData.FromString(""" + { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g., San Francisco, CA" + }, + "unit": { + "type": "string", + "enum": ["Celsius", "Fahrenheit"], + "description": "The temperature unit to use. Infer this from the user's location." + } + } + } + """), + }; + + FunctionToolDefinition getRainProbabilityTool = new() + { + FunctionName = "get_current_rain_probability", + Description = "Gets the current forecasted probability of rain at a specific location," + + " represented as a percent chance in the range of 0 to 100.", + Parameters = BinaryData.FromString(""" + { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g., San Francisco, CA" + } + }, + "required": ["location"] + } + """), + }; + + // TODO: this test does not send a message that requires action -- update it + // to do that. + + AssistantClient client = GetTestClient(); + Assistant assistant = client.CreateAssistant("gpt-3.5-turbo"); + Validate(assistant); + AssistantThread thread = client.CreateThread(); + Validate(thread); + PageResult runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(0)); + ThreadMessage message = client.CreateMessage(thread.Id, MessageRole.User, ["Hello, assistant!"]); + Validate(message); + + string threadId = thread.Id; + string runId = default; + + // Create streaming + string json = $"{{\"assistant_id\":\"{assistant.Id}\", \"stream\":true}}"; + BinaryContent content = BinaryContent.Create(BinaryData.FromString(json)); + RequestOptions options = new() { BufferResponse = false }; + + RunOperation runOperation = client.CreateRun(ReturnWhen.Started, thread.Id, content, options); + + // Instead, callers must get the response stream and parse it. + PipelineResponse response = runOperation.GetRawResponse(); + IAsyncEnumerable> events = SseParser.Create( + response.ContentStream, + (_, bytes) => bytes.ToArray()).EnumerateAsync(); + + string status = default; + byte[] data = default; + + await foreach (var sseItem in events) + { + if (BinaryData.FromBytes(sseItem.Data).ToString() == "[DONE]") + { + continue; + } + + using JsonDocument doc = JsonDocument.Parse(sseItem.Data); + + string prefix = sseItem.EventType.AsSpan().Slice(0, 11).ToString(); + string suffix = sseItem.EventType.AsSpan().Slice(11).ToString(); + if (prefix == "thread.run." && !suffix.Contains("step.")) + { + status = doc.RootElement.GetProperty("status"u8).GetString()!; + data = sseItem.Data; + } + } + + if (status == "requires_action") + { + using JsonDocument doc = JsonDocument.Parse(data); + IEnumerable toolCallJsonElements = doc.RootElement + .GetProperty("required_action") + .GetProperty("submit_tool_outputs") + .GetProperty("tool_calls").EnumerateArray(); + + List outputsToSubmit = []; + + foreach (JsonElement toolCallJsonElement in toolCallJsonElements) + { + string functionName = toolCallJsonElement.GetProperty("function").GetProperty("name").GetString(); + string toolCallId = toolCallJsonElement.GetProperty("id").GetString(); + + if (functionName == getTemperatureTool.FunctionName) + { + outputsToSubmit.Add(new ToolOutput(toolCallId, "57")); + } + else if (functionName == getRainProbabilityTool.FunctionName) + { + outputsToSubmit.Add(new ToolOutput(toolCallId, "25%")); + } + } + + await runOperation.SubmitToolOutputsToRunAsync(outputsToSubmit); + } + + Assert.That(status, Is.EqualTo(RunStatus.Completed.ToString())); + } + + + [Test] + public void LRO_Convenience_Polling_CanWaitForThreadRunToComplete() + { + AssistantClient client = GetTestClient(); + Assistant assistant = client.CreateAssistant("gpt-3.5-turbo"); + Validate(assistant); + AssistantThread thread = client.CreateThread(); + Validate(thread); + PageResult runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(0)); + ThreadMessage message = client.CreateMessage(thread.Id, MessageRole.User, ["Hello, assistant!"]); + Validate(message); + + // Create polling + RunOperation runOperation = client.CreateRun(ReturnWhen.Started, thread, assistant); + + Assert.That(runOperation.IsCompleted, Is.False); + Assert.That(runOperation.ThreadId, Is.EqualTo(thread.Id)); + Assert.That(runOperation.RunId, Is.Not.Null); + Assert.That(runOperation.Status, Is.EqualTo(RunStatus.Queued)); + Assert.That(runOperation.Value, Is.Not.Null); + Assert.That(runOperation.Value.Id, Is.EqualTo(runOperation.RunId)); + + // Wait for operation to complete. + runOperation.WaitUntilStopped(); + + runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(1)); + Assert.That(runsPage.Values[0].Id, Is.EqualTo(runOperation.RunId)); + + Assert.That(runOperation.IsCompleted, Is.True); + Assert.That(runOperation.Status, Is.EqualTo(RunStatus.Completed)); + Assert.That(runOperation.Value.Status, Is.EqualTo(RunStatus.Completed)); + + PageResult messagesPage = client.GetMessages(thread).GetCurrentPage(); + Assert.That(messagesPage.Values.Count, Is.EqualTo(2)); + messagesPage = client.GetMessages(thread).GetCurrentPage(); + Assert.That(messagesPage.Values.Count, Is.EqualTo(2)); + + Assert.That(messagesPage.Values[0].Role, Is.EqualTo(MessageRole.Assistant)); + Assert.That(messagesPage.Values[1].Role, Is.EqualTo(MessageRole.User)); + Assert.That(messagesPage.Values[1].Id, Is.EqualTo(message.Id)); + } + + [Test] + public async Task LRO_Convenience_Polling_CanPollWithCustomPollingInterval() + { + AssistantClient client = GetTestClient(); + Assistant assistant = client.CreateAssistant("gpt-3.5-turbo"); + Validate(assistant); + AssistantThread thread = client.CreateThread(); + Validate(thread); + PageResult runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(0)); + ThreadMessage message = client.CreateMessage(thread.Id, MessageRole.User, ["Hello, assistant!"]); + Validate(message); + + // Create polling + RunOperation runOperation = client.CreateRun(ReturnWhen.Started, thread, assistant); + + Assert.That(runOperation.IsCompleted, Is.False); + Assert.That(runOperation.ThreadId, Is.EqualTo(thread.Id)); + Assert.That(runOperation.RunId, Is.Not.Null); + Assert.That(runOperation.Status, Is.EqualTo(RunStatus.Queued)); + Assert.That(runOperation.Value, Is.Not.Null); + Assert.That(runOperation.Value.Id, Is.EqualTo(runOperation.RunId)); + + // Poll manually to implement custom poll interval + IEnumerable updates = runOperation.GetUpdates(TimeSpan.Zero); + + int i = 0; + foreach (ThreadRun update in updates) + { + // Change polling interval for each update + await Task.Delay(i++ * 100); + } + + Assert.That(runOperation.IsCompleted, Is.True); + Assert.That(runOperation.Status, Is.EqualTo(RunStatus.Completed)); + Assert.That(runOperation.Value.Status, Is.EqualTo(RunStatus.Completed)); + } + + [Test] + public void LRO_Convenience_Polling_CanSubmitToolUpdates_Wait() + { + AssistantClient client = GetTestClient(); + + #region Create Assistant with Tools + + Assistant assistant = client.CreateAssistant("gpt-3.5-turbo", new AssistantCreationOptions() + { + Tools = + { + new FunctionToolDefinition() + { + FunctionName = "get_favorite_food_for_day_of_week", + Description = "gets the user's favorite food for a given day of the week, like Tuesday", + Parameters = BinaryData.FromObjectAsJson(new + { + type = "object", + properties = new + { + day_of_week = new + { + type = "string", + description = "a day of the week, like Tuesday or Saturday", + } + } + }), + }, + }, + }); + Validate(assistant); + Assert.That(assistant.Tools?.Count, Is.EqualTo(1)); + + FunctionToolDefinition responseToolDefinition = assistant.Tools[0] as FunctionToolDefinition; + Assert.That(responseToolDefinition?.FunctionName, Is.EqualTo("get_favorite_food_for_day_of_week")); + Assert.That(responseToolDefinition?.Parameters, Is.Not.Null); + + #endregion + + #region Create Thread + + AssistantThread thread = client.CreateThread(); + Validate(thread); + PageResult runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(0)); + ThreadMessage message = client.CreateMessage(thread.Id, MessageRole.User, ["What should I eat on Thursday?"]); + Validate(message); + + #endregion + + // Create run polling + RunOperation runOperation = client.CreateRun( + ReturnWhen.Started, + thread, assistant, + new RunCreationOptions() + { + AdditionalInstructions = "Call provided tools when appropriate.", + }); + + while (!runOperation.IsCompleted) + { + runOperation.WaitUntilStopped(); + + if (runOperation.Status == RunStatus.RequiresAction) + { + Assert.That(runOperation.Value.RequiredActions?.Count, Is.EqualTo(1)); + Assert.That(runOperation.Value.RequiredActions[0].ToolCallId, Is.Not.Null.And.Not.Empty); + Assert.That(runOperation.Value.RequiredActions[0].FunctionName, Is.EqualTo("get_favorite_food_for_day_of_week")); + Assert.That(runOperation.Value.RequiredActions[0].FunctionArguments, Is.Not.Null.And.Not.Empty); + Assert.That(runOperation.Status?.IsTerminal, Is.False); + + IEnumerable outputs = new List { + new ToolOutput(runOperation.Value.RequiredActions[0].ToolCallId, "tacos") + }; + + runOperation.SubmitToolOutputsToRun(outputs); + } + } + + Assert.That(runOperation.Status, Is.EqualTo(RunStatus.Completed)); + + PageCollection messagePages = client.GetMessages(runOperation.ThreadId, new MessageCollectionOptions() { Order = ListOrder.NewestFirst }); + PageResult page = messagePages.GetCurrentPage(); + Assert.That(page.Values.Count, Is.GreaterThan(1)); + Assert.That(page.Values[0].Role, Is.EqualTo(MessageRole.Assistant)); + Assert.That(page.Values[0].Content?[0], Is.Not.Null); + Assert.That(page.Values[0].Content[0].Text.ToLowerInvariant(), Does.Contain("tacos")); + } + + [Test] + public void LRO_Convenience_Polling_CanSubmitToolUpdates_GetAllUpdates() + { + AssistantClient client = GetTestClient(); + + #region Create Assistant with Tools + + Assistant assistant = client.CreateAssistant("gpt-3.5-turbo", new AssistantCreationOptions() + { + Tools = + { + new FunctionToolDefinition() + { + FunctionName = "get_favorite_food_for_day_of_week", + Description = "gets the user's favorite food for a given day of the week, like Tuesday", + Parameters = BinaryData.FromObjectAsJson(new + { + type = "object", + properties = new + { + day_of_week = new + { + type = "string", + description = "a day of the week, like Tuesday or Saturday", + } + } + }), + }, + }, + }); + Validate(assistant); + Assert.That(assistant.Tools?.Count, Is.EqualTo(1)); + + FunctionToolDefinition responseToolDefinition = assistant.Tools[0] as FunctionToolDefinition; + Assert.That(responseToolDefinition?.FunctionName, Is.EqualTo("get_favorite_food_for_day_of_week")); + Assert.That(responseToolDefinition?.Parameters, Is.Not.Null); + + #endregion + + #region Create Thread + + AssistantThread thread = client.CreateThread(); + Validate(thread); + PageResult runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(0)); + ThreadMessage message = client.CreateMessage(thread.Id, MessageRole.User, ["What should I eat on Thursday?"]); + Validate(message); + + #endregion + + // Create run polling + RunOperation runOperation = client.CreateRun( + ReturnWhen.Started, + thread, assistant, + new RunCreationOptions() + { + AdditionalInstructions = "Call provided tools when appropriate.", + }); + + IEnumerable updates = runOperation.GetUpdates(); + + foreach (ThreadRun update in updates) + { + if (update.Status == RunStatus.RequiresAction) + { + Assert.That(runOperation.Value.RequiredActions?.Count, Is.EqualTo(1)); + Assert.That(runOperation.Value.RequiredActions[0].ToolCallId, Is.Not.Null.And.Not.Empty); + Assert.That(runOperation.Value.RequiredActions[0].FunctionName, Is.EqualTo("get_favorite_food_for_day_of_week")); + Assert.That(runOperation.Value.RequiredActions[0].FunctionArguments, Is.Not.Null.And.Not.Empty); + Assert.That(runOperation.Status?.IsTerminal, Is.False); + + IEnumerable outputs = new List { + new ToolOutput(runOperation.Value.RequiredActions[0].ToolCallId, "tacos") + }; + + runOperation.SubmitToolOutputsToRun(outputs); + } + } + + Assert.That(runOperation.Status, Is.EqualTo(RunStatus.Completed)); + + PageCollection messagePages = client.GetMessages(runOperation.ThreadId, new MessageCollectionOptions() { Order = ListOrder.NewestFirst }); + PageResult page = messagePages.GetCurrentPage(); + Assert.That(page.Values.Count, Is.GreaterThan(1)); + Assert.That(page.Values[0].Role, Is.EqualTo(MessageRole.Assistant)); + Assert.That(page.Values[0].Content?[0], Is.Not.Null); + Assert.That(page.Values[0].Content[0].Text.ToLowerInvariant(), Does.Contain("tacos")); + } + + [Test] + public void LRO_Convenience_Polling_CanRehydrateRunOperationFromPageToken() + { + AssistantClient client = GetTestClient(); + Assistant assistant = client.CreateAssistant("gpt-3.5-turbo"); + Validate(assistant); + AssistantThread thread = client.CreateThread(); + Validate(thread); + PageResult runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(0)); + ThreadMessage message = client.CreateMessage(thread.Id, MessageRole.User, ["Hello, assistant!"]); + Validate(message); + + // Create polling + RunOperation runOperation = client.CreateRun(ReturnWhen.Started, thread, assistant); + + // Get the rehydration token + ContinuationToken rehydrationToken = runOperation.RehydrationToken; + + // Call the rehydration method + RunOperation rehydratedRunOperation = client.ContinueRun(rehydrationToken); + + // Validate operations are equivalent + Assert.That(runOperation.ThreadId, Is.EqualTo(rehydratedRunOperation.ThreadId)); + Assert.That(runOperation.RunId, Is.EqualTo(rehydratedRunOperation.RunId)); + + // Wait for both to complete + Task.WaitAll( + Task.Run(() => runOperation.WaitUntilStopped()), + Task.Run(() => rehydratedRunOperation.WaitUntilStopped())); + + Assert.That(runOperation.Status, Is.EqualTo(rehydratedRunOperation.Status)); + + // Validate that values from both are equivalent + PageCollection runStepPages = runOperation.GetRunSteps(); + PageCollection rehydratedRunStepPages = rehydratedRunOperation.GetRunSteps(); + + List runSteps = runStepPages.GetAllValues().ToList(); + List rehydratedRunSteps = rehydratedRunStepPages.GetAllValues().ToList(); + + for (int i = 0; i < runSteps.Count; i++) + { + Assert.AreEqual(runSteps[i].Id, rehydratedRunSteps[i].Id); + Assert.AreEqual(runSteps[i].Status, rehydratedRunSteps[i].Status); + } + + Assert.AreEqual(runSteps.Count, rehydratedRunSteps.Count); + Assert.That(runSteps.Count, Is.GreaterThan(0)); + } + + [Test] + public async Task LRO_Convenience_Streaming_CanWaitForThreadRunToComplete() + { + AssistantClient client = GetTestClient(); + Assistant assistant = client.CreateAssistant("gpt-3.5-turbo"); + Validate(assistant); + AssistantThread thread = client.CreateThread(); + Validate(thread); + PageResult runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(0)); + ThreadMessage message = client.CreateMessage(thread.Id, MessageRole.User, ["Hello, assistant!"]); + Validate(message); + + // Create streaming + StreamingRunOperation runOperation = client.CreateRunStreaming(thread, assistant); + + // Before the response stream has been enumerated, all the public properties + // should still be null. + Assert.That(runOperation.IsCompleted, Is.False); + Assert.That(runOperation.ThreadId, Is.Null); + Assert.That(runOperation.RunId, Is.Null); + Assert.That(runOperation.Status, Is.Null); + Assert.That(runOperation.Value, Is.Null); + + // Wait for operation to complete, as implemented in streaming operation type. + await runOperation.WaitUntilStoppedAsync(); + + // Validate that req/response operation work with streaming + IAsyncEnumerable steps = runOperation.GetRunStepsAsync().GetAllValuesAsync(); + Assert.That(await steps.CountAsync(), Is.GreaterThan(0)); + + runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(1)); + Assert.That(runsPage.Values[0].Id, Is.EqualTo(runOperation.RunId)); + + Assert.That(runOperation.IsCompleted, Is.True); + Assert.That(runOperation.Status, Is.EqualTo(RunStatus.Completed)); + Assert.That(runOperation.Value.Status, Is.EqualTo(RunStatus.Completed)); + + PageResult messagesPage = client.GetMessages(thread).GetCurrentPage(); + Assert.That(messagesPage.Values.Count, Is.EqualTo(2)); + messagesPage = client.GetMessages(thread).GetCurrentPage(); + Assert.That(messagesPage.Values.Count, Is.EqualTo(2)); + + Assert.That(messagesPage.Values[0].Role, Is.EqualTo(MessageRole.Assistant)); + Assert.That(messagesPage.Values[1].Role, Is.EqualTo(MessageRole.User)); + Assert.That(messagesPage.Values[1].Id, Is.EqualTo(message.Id)); + } + + [Test] + public async Task LRO_Convenience_Streaming_CanGetStreamingUpdates() + { + AssistantClient client = GetTestClient(); + Assistant assistant = client.CreateAssistant("gpt-3.5-turbo"); + Validate(assistant); + AssistantThread thread = client.CreateThread(); + Validate(thread); + PageResult runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(0)); + ThreadMessage message = client.CreateMessage(thread.Id, MessageRole.User, ["Hello, assistant!"]); + Validate(message); + + // Create streaming + StreamingRunOperation runOperation = client.CreateRunStreaming(thread, assistant); + + // Before the response stream has been enumerated, all the public properties + // should still be null. + Assert.That(runOperation.IsCompleted, Is.False); + Assert.That(runOperation.ThreadId, Is.Null); + Assert.That(runOperation.RunId, Is.Null); + Assert.That(runOperation.Status, Is.Null); + Assert.That(runOperation.Value, Is.Null); + + // Instead of calling Wait for the operation to complete, manually + // enumerate the updates from the update stream. + IAsyncEnumerable updates = runOperation.GetUpdatesStreamingAsync(); + await foreach (StreamingUpdate update in updates) + { + // TODO: we could print messages here, but not critical ATM. + } + + // TODO: add this back once conveniences are available + //ThreadRun retrievedRun = runOperation.GetRun(thread.Id, runOperation.RunId, options: default); + //Assert.That(retrievedRun.Id, Is.EqualTo(run.Id)); + + runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(1)); + Assert.That(runsPage.Values[0].Id, Is.EqualTo(runOperation.RunId)); + + Assert.That(runOperation.IsCompleted, Is.True); + Assert.That(runOperation.Status, Is.EqualTo(RunStatus.Completed)); + Assert.That(runOperation.Value.Status, Is.EqualTo(RunStatus.Completed)); + Assert.That(runOperation.ThreadId, Is.EqualTo(thread.Id)); + + PageResult messagesPage = client.GetMessages(thread).GetCurrentPage(); + Assert.That(messagesPage.Values.Count, Is.EqualTo(2)); + messagesPage = client.GetMessages(thread).GetCurrentPage(); + Assert.That(messagesPage.Values.Count, Is.EqualTo(2)); + + Assert.That(messagesPage.Values[0].Role, Is.EqualTo(MessageRole.Assistant)); + Assert.That(messagesPage.Values[1].Role, Is.EqualTo(MessageRole.User)); + Assert.That(messagesPage.Values[1].Id, Is.EqualTo(message.Id)); + } + + [Test] + public async Task LRO_Convenience_Streaming_CanSubmitToolUpdates_GetAllUpdates() + { + AssistantClient client = GetTestClient(); + + #region Create Assistant with Tools + + Assistant assistant = client.CreateAssistant("gpt-3.5-turbo", new AssistantCreationOptions() + { + Tools = + { + new FunctionToolDefinition() + { + FunctionName = "get_favorite_food_for_day_of_week", + Description = "gets the user's favorite food for a given day of the week, like Tuesday", + Parameters = BinaryData.FromObjectAsJson(new + { + type = "object", + properties = new + { + day_of_week = new + { + type = "string", + description = "a day of the week, like Tuesday or Saturday", + } + } + }), + }, + }, + }); + Validate(assistant); + Assert.That(assistant.Tools?.Count, Is.EqualTo(1)); + + FunctionToolDefinition responseToolDefinition = assistant.Tools[0] as FunctionToolDefinition; + Assert.That(responseToolDefinition?.FunctionName, Is.EqualTo("get_favorite_food_for_day_of_week")); + Assert.That(responseToolDefinition?.Parameters, Is.Not.Null); + + #endregion + + #region Create Thread + + AssistantThread thread = client.CreateThread(); + Validate(thread); + PageResult runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(0)); + ThreadMessage message = client.CreateMessage(thread.Id, MessageRole.User, ["What should I eat on Thursday?"]); + Validate(message); + + #endregion + + // Create run streaming + StreamingRunOperation runOperation = client.CreateRunStreaming(thread, assistant, + new RunCreationOptions() + { + AdditionalInstructions = "Call provided tools when appropriate.", + }); + + + IAsyncEnumerable updates = runOperation.GetUpdatesStreamingAsync(); + + await foreach (StreamingUpdate update in updates) + { + if (update is RunUpdate && + runOperation.Status == RunStatus.RequiresAction) + { + Assert.That(runOperation.Value.RequiredActions?.Count, Is.EqualTo(1)); + Assert.That(runOperation.Value.RequiredActions[0].ToolCallId, Is.Not.Null.And.Not.Empty); + Assert.That(runOperation.Value.RequiredActions[0].FunctionName, Is.EqualTo("get_favorite_food_for_day_of_week")); + Assert.That(runOperation.Value.RequiredActions[0].FunctionArguments, Is.Not.Null.And.Not.Empty); + Assert.That(runOperation.Status?.IsTerminal, Is.False); + + IEnumerable outputs = new List { + new ToolOutput(runOperation.Value.RequiredActions[0].ToolCallId, "tacos") + }; + + await runOperation.SubmitToolOutputsToRunStreamingAsync(outputs); + } + } + + Assert.That(runOperation.Status, Is.EqualTo(RunStatus.Completed)); + + PageCollection messagePages = client.GetMessages(runOperation.ThreadId, new MessageCollectionOptions() { Order = ListOrder.NewestFirst }); + PageResult page = messagePages.GetCurrentPage(); + Assert.That(page.Values.Count, Is.GreaterThan(1)); + Assert.That(page.Values[0].Role, Is.EqualTo(MessageRole.Assistant)); + Assert.That(page.Values[0].Content?[0], Is.Not.Null); + Assert.That(page.Values[0].Content[0].Text.ToLowerInvariant(), Does.Contain("tacos")); + } + + [Test] + public async Task LRO_Convenience_Streaming_CanSubmitToolUpdates_Wait() + { + AssistantClient client = GetTestClient(); + + #region Create Assistant with Tools + + Assistant assistant = client.CreateAssistant("gpt-3.5-turbo", new AssistantCreationOptions() + { + Tools = + { + new FunctionToolDefinition() + { + FunctionName = "get_favorite_food_for_day_of_week", + Description = "gets the user's favorite food for a given day of the week, like Tuesday", + Parameters = BinaryData.FromObjectAsJson(new + { + type = "object", + properties = new + { + day_of_week = new + { + type = "string", + description = "a day of the week, like Tuesday or Saturday", + } + } + }), + }, + }, + }); + Validate(assistant); + Assert.That(assistant.Tools?.Count, Is.EqualTo(1)); + + FunctionToolDefinition responseToolDefinition = assistant.Tools[0] as FunctionToolDefinition; + Assert.That(responseToolDefinition?.FunctionName, Is.EqualTo("get_favorite_food_for_day_of_week")); + Assert.That(responseToolDefinition?.Parameters, Is.Not.Null); + + #endregion + + #region Create Thread + + AssistantThread thread = client.CreateThread(); + Validate(thread); + PageResult runsPage = client.GetRuns(thread).GetCurrentPage(); + Assert.That(runsPage.Values.Count, Is.EqualTo(0)); + ThreadMessage message = client.CreateMessage(thread.Id, MessageRole.User, ["What should I eat on Thursday?"]); + Validate(message); + + #endregion + + // Create run streaming + StreamingRunOperation runOperation = client.CreateRunStreaming(thread, assistant, + new RunCreationOptions() + { + AdditionalInstructions = "Call provided tools when appropriate.", + }); + + do + { + await runOperation.WaitUntilStoppedAsync(); + + if (runOperation.Status == RunStatus.RequiresAction) + { + Assert.That(runOperation.Value.RequiredActions?.Count, Is.EqualTo(1)); + Assert.That(runOperation.Value.RequiredActions[0].ToolCallId, Is.Not.Null.And.Not.Empty); + Assert.That(runOperation.Value.RequiredActions[0].FunctionName, Is.EqualTo("get_favorite_food_for_day_of_week")); + Assert.That(runOperation.Value.RequiredActions[0].FunctionArguments, Is.Not.Null.And.Not.Empty); + Assert.That(runOperation.Status?.IsTerminal, Is.False); + + IEnumerable outputs = new List { + new ToolOutput(runOperation.Value.RequiredActions[0].ToolCallId, "tacos") + }; + + await runOperation.SubmitToolOutputsToRunStreamingAsync(outputs); + } + } + while (!runOperation.IsCompleted); + + Assert.That(runOperation.Status, Is.EqualTo(RunStatus.Completed)); + + PageCollection messagePages = client.GetMessages(runOperation.ThreadId, new MessageCollectionOptions() { Order = ListOrder.NewestFirst }); + PageResult page = messagePages.GetCurrentPage(); + Assert.That(page.Values.Count, Is.GreaterThan(1)); + Assert.That(page.Values[0].Role, Is.EqualTo(MessageRole.Assistant)); + Assert.That(page.Values[0].Content?[0], Is.Not.Null); + Assert.That(page.Values[0].Content[0].Text.ToLowerInvariant(), Does.Contain("tacos")); + } + + #endregion + + /// /// Performs basic, invariant validation of a target that was just instantiated from its corresponding origination /// mechanism. If applicable, the instance is recorded into the test run for cleanup of persistent resources. /// @@ -1152,6 +2007,11 @@ private void Validate(T target) { Assert.That(run?.Id, Is.Not.Null); } + else if (target is RunOperation runOperation) + { + Assert.That(runOperation?.ThreadId, Is.Not.Null); + Assert.That(runOperation?.RunId, Is.Not.Null); + } else if (target is OpenAIFileInfo file) { Assert.That(file?.Id, Is.Not.Null); diff --git a/tests/Assistants/VectorStoreTests.cs b/tests/Assistants/VectorStoreTests.cs index 8b959e08c..bf58a476a 100644 --- a/tests/Assistants/VectorStoreTests.cs +++ b/tests/Assistants/VectorStoreTests.cs @@ -1,13 +1,10 @@ using NUnit.Framework; -using OpenAI.Assistants; using OpenAI.Files; using OpenAI.VectorStores; using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; -using System.Diagnostics; -using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -18,6 +15,7 @@ namespace OpenAI.Tests.VectorStores; #pragma warning disable OPENAI001 [Parallelizable(ParallelScope.Fixtures)] +[Category("Assistants")] public partial class VectorStoreTests { [Test] @@ -273,7 +271,7 @@ public void CanUseBatchIngestion() IReadOnlyList testFiles = GetNewTestFiles(5); - VectorStoreBatchFileJob batchJob = client.CreateBatchFileJob(vectorStore, testFiles); + VectorStoreFileBatchOperation batchJob = client.CreateBatchFileJob(ReturnWhen.Started, vectorStore, testFiles); Validate(batchJob); Assert.Multiple(() => @@ -283,12 +281,9 @@ public void CanUseBatchIngestion() Assert.That(batchJob.Status, Is.EqualTo(VectorStoreBatchFileJobStatus.InProgress)); }); - for (int i = 0; i < 10 && client.GetBatchFileJob(batchJob).Value.Status != VectorStoreBatchFileJobStatus.Completed; i++) - { - Thread.Sleep(500); - } + batchJob.WaitForCompletion(); - foreach (VectorStoreFileAssociation association in client.GetFileAssociations(batchJob).GetAllValues()) + foreach (VectorStoreFileAssociation association in batchJob.GetFileAssociations().GetAllValues()) { Assert.Multiple(() => { @@ -384,10 +379,10 @@ protected void Cleanup() { ErrorOptions = ClientErrorBehaviors.NoThrow, }; - foreach (VectorStoreBatchFileJob job in _jobsToCancel) + foreach (VectorStoreFileBatchOperation operation in _operationsToCancel) { - ClientResult protocolResult = vectorStoreClient.CancelBatchFileJob(job.VectorStoreId, job.BatchId, requestOptions); - Console.WriteLine($"Cleanup: {job.BatchId} => {protocolResult?.GetRawResponse()?.Status}"); + ClientResult protocolResult = operation.CancelBatchFileJob(operation.VectorStoreId, operation.BatchId, requestOptions); + Console.WriteLine($"Cleanup: {operation.BatchId} => {protocolResult?.GetRawResponse()?.Status}"); } foreach (VectorStoreFileAssociation association in _associationsToRemove) { @@ -415,10 +410,15 @@ protected void Cleanup() /// The provided instance type isn't supported. private void Validate(T target) { - if (target is VectorStoreBatchFileJob job) + if (target is VectorStoreFileBatchOperation operation) { - Assert.That(job.BatchId, Is.Not.Null); - _jobsToCancel.Add(job); + Assert.That(operation.VectorStoreId, Is.Not.Null); + Assert.That(operation.BatchId, Is.Not.Null); + + Assert.That(operation.Value, Is.Not.Null); + Assert.That(operation.Status, Is.Not.Null); + + _operationsToCancel.Add(operation); } else if (target is VectorStoreFileAssociation association) { @@ -442,7 +442,7 @@ private void Validate(T target) } } - private readonly List _jobsToCancel = []; + private readonly List _operationsToCancel = []; private readonly List _associationsToRemove = []; private readonly List _filesToDelete = []; private readonly List _vectorStoresToDelete = []; diff --git a/tests/Audio/TextToSpeechTests.cs b/tests/Audio/TextToSpeechTests.cs index 58d5200cd..c3753e149 100644 --- a/tests/Audio/TextToSpeechTests.cs +++ b/tests/Audio/TextToSpeechTests.cs @@ -2,8 +2,6 @@ using OpenAI.Audio; using OpenAI.Tests.Utility; using System; -using System.ClientModel; -using System.Collections.Generic; using System.Threading.Tasks; using static OpenAI.Tests.TestHelpers; @@ -12,17 +10,17 @@ namespace OpenAI.Tests.Audio; [TestFixture(true)] [TestFixture(false)] [Parallelizable(ParallelScope.All)] +[Category("Audio")] public partial class TextToSpeechTests : SyncAsyncTestBase { - public TextToSpeechTests(bool isAsync) - : base(isAsync) + public TextToSpeechTests(bool isAsync) : base(isAsync) { } [Test] public async Task BasicTextToSpeechWorks() { - AudioClient client = new("tts-1"); + AudioClient client = GetTestClient(TestScenario.Audio_TTS); BinaryData audio = IsAsync ? await client.GenerateSpeechFromTextAsync("Hello, world! This is a test.", GeneratedSpeechVoice.Shimmer) @@ -42,7 +40,7 @@ public async Task BasicTextToSpeechWorks() [TestCase(GeneratedSpeechFormat.Pcm)] public async Task OutputFormatWorks(GeneratedSpeechFormat? responseFormat) { - AudioClient client = new("tts-1"); + AudioClient client = GetTestClient(TestScenario.Audio_TTS); SpeechGenerationOptions options = responseFormat == null ? new() @@ -57,7 +55,7 @@ public async Task OutputFormatWorks(GeneratedSpeechFormat? responseFormat) private void ValidateGeneratedAudio(BinaryData audio, string expectedSubstring) { - AudioClient client = GetTestClient(TestScenario.Transcription); + AudioClient client = GetTestClient(TestScenario.Audio_Whisper); AudioTranscription transcription = client.TranscribeAudio(audio.ToStream(), "hello_world.wav"); Assert.That(transcription.Text.ToLowerInvariant(), Contains.Substring(expectedSubstring)); diff --git a/tests/Audio/TranscriptionTests.cs b/tests/Audio/TranscriptionTests.cs index a2a53a5bb..7fead9b24 100644 --- a/tests/Audio/TranscriptionTests.cs +++ b/tests/Audio/TranscriptionTests.cs @@ -14,10 +14,10 @@ namespace OpenAI.Tests.Audio; [TestFixture(true)] [TestFixture(false)] [Parallelizable(ParallelScope.All)] +[Category("Audio")] public partial class TranscriptionTests : SyncAsyncTestBase { - public TranscriptionTests(bool isAsync) - : base(isAsync) + public TranscriptionTests(bool isAsync) : base(isAsync) { } @@ -32,7 +32,7 @@ public enum AudioSourceKind [TestCase(AudioSourceKind.UsingFilePath)] public async Task TranscriptionWorks(AudioSourceKind audioSourceKind) { - AudioClient client = GetTestClient(); + AudioClient client = GetTestClient(TestScenario.Audio_Whisper); string filename = "audio_hello_world.mp3"; string path = Path.Combine("Assets", filename); AudioTranscription transcription = null; @@ -63,7 +63,7 @@ public async Task TranscriptionWorks(AudioSourceKind audioSourceKind) [TestCase(AudioTimestampGranularities.Word | AudioTimestampGranularities.Segment)] public async Task TimestampsWork(AudioTimestampGranularities granularityFlags) { - AudioClient client = GetTestClient(); + AudioClient client = GetTestClient(TestScenario.Audio_Whisper); using FileStream inputStream = File.OpenRead(Path.Combine("Assets", "audio_hello_world.mp3")); @@ -136,7 +136,7 @@ public async Task TimestampsWork(AudioTimestampGranularities granularityFlags) [TestCase(AudioTranscriptionFormat.Vtt)] public async Task TranscriptionFormatsWork(AudioTranscriptionFormat formatToTest) { - AudioClient client = GetTestClient(); + AudioClient client = GetTestClient(TestScenario.Audio_Whisper); string path = Path.Combine("Assets", "audio_hello_world.mp3"); AudioTranscriptionOptions options = new() @@ -155,7 +155,7 @@ public async Task TranscriptionFormatsWork(AudioTranscriptionFormat formatToTest [Test] public async Task BadTranscriptionRequest() { - AudioClient client = GetTestClient(); + AudioClient client = GetTestClient(TestScenario.Audio_Whisper); string path = Path.Combine("Assets", "audio_hello_world.mp3"); @@ -180,6 +180,4 @@ public async Task BadTranscriptionRequest() Assert.That(caughtException, Is.InstanceOf()); Assert.That(caughtException.Message?.ToLower(), Contains.Substring("invalid language")); } - - private static AudioClient GetTestClient() => GetTestClient(TestScenario.Transcription); } diff --git a/tests/Audio/TranslationTests.cs b/tests/Audio/TranslationTests.cs index 5b0c5ec15..ccbeae4d9 100644 --- a/tests/Audio/TranslationTests.cs +++ b/tests/Audio/TranslationTests.cs @@ -10,10 +10,10 @@ namespace OpenAI.Tests.Audio; [TestFixture(true)] [TestFixture(false)] [Parallelizable(ParallelScope.All)] +[Category("Audio")] public partial class TranslationTests : SyncAsyncTestBase { - public TranslationTests(bool isAsync) - : base(isAsync) + public TranslationTests(bool isAsync) : base(isAsync) { } @@ -28,7 +28,7 @@ public enum AudioSourceKind [TestCase(AudioSourceKind.UsingFilePath)] public async Task TranslationWorks(AudioSourceKind audioSourceKind) { - AudioClient client = GetTestClient(); + AudioClient client = GetTestClient(TestScenario.Audio_Whisper); string filename = "audio_french.wav"; string path = Path.Combine("Assets", filename); @@ -59,7 +59,7 @@ public async Task TranslationWorks(AudioSourceKind audioSourceKind) [TestCase(AudioTranslationFormat.Vtt)] public async Task TranslationFormatsWork(AudioTranslationFormat formatToTest) { - AudioClient client = GetTestClient(); + AudioClient client = GetTestClient(TestScenario.Audio_Whisper); string path = Path.Combine("Assets", "audio_french.wav"); AudioTranslationOptions options = new() @@ -73,6 +73,4 @@ public async Task TranslationFormatsWork(AudioTranslationFormat formatToTest) Assert.That(translation?.Text?.ToLowerInvariant(), Does.Contain("recognition")); } - - private static AudioClient GetTestClient() => GetTestClient(TestScenario.Transcription); } diff --git a/tests/Batch/BatchTests.cs b/tests/Batch/BatchTests.cs index b8fe72b68..1289d74ae 100644 --- a/tests/Batch/BatchTests.cs +++ b/tests/Batch/BatchTests.cs @@ -14,10 +14,10 @@ namespace OpenAI.Tests.Batch; [TestFixture(true)] [TestFixture(false)] [Parallelizable(ParallelScope.All)] +[Category("Batch")] public partial class BatchTests : SyncAsyncTestBase { - public BatchTests(bool isAsync) - : base(isAsync) + public BatchTests(bool isAsync) : base(isAsync) { } @@ -55,7 +55,7 @@ public async Task CreateGetAndCancelBatchProtocol() { using MemoryStream testFileStream = new(); using StreamWriter streamWriter = new (testFileStream); - string input = @"{""custom_id"": ""request-1"", ""method"": ""POST"", ""url"": ""/v1/chat/completions"", ""body"": {""model"": ""gpt-3.5-turbo"", ""messages"": [{""role"": ""system"", ""content"": ""You are a helpful assistant.""}, {""role"": ""user"", ""content"": ""What is 2+2?""}]}}"; + string input = @"{""custom_id"": ""request-1"", ""method"": ""POST"", ""url"": ""/v1/chat/completions"", ""body"": {""model"": ""gpt-4o-mini"", ""messages"": [{""role"": ""system"", ""content"": ""You are a helpful assistant.""}, {""role"": ""user"", ""content"": ""What is 2+2?""}]}}"; streamWriter.WriteLine(input); streamWriter.Flush(); testFileStream.Position = 0; @@ -75,11 +75,11 @@ public async Task CreateGetAndCancelBatchProtocol() testMetadataKey = "test metadata value", }, })); - ClientResult batchResult = IsAsync - ? await client.CreateBatchAsync(content) - : client.CreateBatch(content); + BatchOperation batchOperation = IsAsync + ? await client.CreateBatchAsync(ReturnWhen.Started, content) + : client.CreateBatch(ReturnWhen.Started, content); - BinaryData response = batchResult.GetRawResponse().Content; + BinaryData response = batchOperation.GetRawResponse().Content; JsonDocument jsonDocument = JsonDocument.Parse(response); JsonElement idElement = jsonDocument.RootElement.GetProperty("id"); @@ -100,18 +100,14 @@ public async Task CreateGetAndCancelBatchProtocol() Assert.That(status, Is.EqualTo("validating")); Assert.That(testMetadataKey, Is.EqualTo("test metadata value")); - batchResult = IsAsync - ? await client.GetBatchAsync(id, options: null) - : client.GetBatch(id, options: null); - JsonElement endpointElement = jsonDocument.RootElement.GetProperty("endpoint"); string endpoint = endpointElement.GetString(); Assert.That(endpoint, Is.EqualTo("/v1/chat/completions")); - batchResult = IsAsync - ? await client.CancelBatchAsync(id, options: null) - : client.CancelBatch(id, options: null); + ClientResult clientResult = IsAsync + ? await batchOperation.CancelBatchAsync(id, options: null) + : batchOperation.CancelBatch(id, options: null); statusElement = jsonDocument.RootElement.GetProperty("status"); status = statusElement.GetString(); diff --git a/tests/Chat/ChatClientTests.cs b/tests/Chat/ChatSmokeTests.cs similarity index 53% rename from tests/Chat/ChatClientTests.cs rename to tests/Chat/ChatSmokeTests.cs index e8d3a6f6a..a3849d3a6 100644 --- a/tests/Chat/ChatClientTests.cs +++ b/tests/Chat/ChatSmokeTests.cs @@ -1,250 +1,111 @@ -using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; using NUnit.Framework; using OpenAI.Chat; using OpenAI.Tests.Utility; using System; using System.ClientModel; using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Diagnostics; using System.IO; -using System.Linq; using System.Net; using System.Text.Json; using System.Threading.Tasks; -using static OpenAI.Tests.TestHelpers; namespace OpenAI.Tests.Chat; [TestFixture(true)] [TestFixture(false)] [Parallelizable(ParallelScope.All)] -public partial class ChatClientTests : SyncAsyncTestBase +[Category("Chat")] +[Category("Smoke")] +public partial class ChatSmokeTests : SyncAsyncTestBase { - public ChatClientTests(bool isAsync) - : base(isAsync) + public ChatSmokeTests(bool isAsync) : base(isAsync) { } [Test] - public async Task HelloWorldChat() - { - ChatClient client = GetTestClient(TestScenario.Chat); - IEnumerable messages = [new UserChatMessage("Hello, world!")]; - ClientResult result = IsAsync - ? await client.CompleteChatAsync(messages) - : client.CompleteChat(messages); - Assert.That(result, Is.InstanceOf>()); - Assert.That(result.Value.Content[0].Kind, Is.EqualTo(ChatMessageContentPartKind.Text)); - Assert.That(result.Value.Content[0].Text.Length, Is.GreaterThan(0)); - } - - [Test] - public async Task HelloWorldWithTopLevelClient() - { - OpenAIClient client = GetTestClient(TestScenario.TopLevel); - ChatClient chatClient = client.GetChatClient("gpt-3.5-turbo"); - IEnumerable messages = [new UserChatMessage("Hello, world!")]; - ClientResult result = IsAsync - ? await chatClient.CompleteChatAsync(messages) - : chatClient.CompleteChat(messages); - Assert.That(result.Value.Content[0].Text.Length, Is.GreaterThan(0)); - } - - [Test] - public async Task MultiMessageChat() - { - ChatClient client = GetTestClient(TestScenario.Chat); - IEnumerable messages = [ - new SystemChatMessage("You are a helpful assistant. You always talk like a pirate."), - new UserChatMessage("Hello, assistant! Can you help me train my parrot?"), - ]; - ClientResult result = IsAsync - ? await client.CompleteChatAsync(messages) - : client.CompleteChat(messages); - Assert.That(new string[] { "aye", "arr", "hearty" }.Any(pirateWord => result.Value.Content[0].Text.ToLowerInvariant().Contains(pirateWord))); - } - - [Test] - public void StreamingChat() + public async Task SmokeTest() { - ChatClient client = GetTestClient(TestScenario.Chat); - IEnumerable messages = [ - new UserChatMessage("What are the best pizza toppings? Give me a breakdown on the reasons.") - ]; - - TimeSpan? firstTokenReceiptTime = null; - TimeSpan? latestTokenReceiptTime = null; - Stopwatch stopwatch = Stopwatch.StartNew(); + string mockResponseId = Guid.NewGuid().ToString(); + long mockCreated = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); - CollectionResult streamingResult = client.CompleteChatStreaming(messages); - Assert.That(streamingResult, Is.InstanceOf>()); - int updateCount = 0; + BinaryData mockRequest = BinaryData.FromString($$""" + { + "model": "gpt-4o-mini", + "messages": [ + { "role": "user", "content": "Hello, assistant!" } + ] + } + """); + BinaryData mockResponse = BinaryData.FromString($$""" + { + "id": "{{mockResponseId}}", + "created": {{mockCreated}}, + "choices": [ + { + "finish_reason": "stop", + "message": { "role": "assistant", "content": "Hi there, user!" } + } + ] + } + """); + MockPipelineTransport mockTransport = new(mockRequest, mockResponse); - foreach (StreamingChatCompletionUpdate chatUpdate in streamingResult) + OpenAIClientOptions options = new() { - firstTokenReceiptTime ??= stopwatch.Elapsed; - latestTokenReceiptTime = stopwatch.Elapsed; - Console.WriteLine(stopwatch.Elapsed.TotalMilliseconds); - updateCount++; - } - Assert.That(updateCount, Is.GreaterThan(1)); - Assert.That(latestTokenReceiptTime - firstTokenReceiptTime > TimeSpan.FromMilliseconds(500)); + Transport = mockTransport + }; + ChatClient client = new("model_name_replaced", new ApiKeyCredential("sk-not-a-real-key"), options); + + ChatCompletion completion = IsAsync + ? await client.CompleteChatAsync(["Mock me!"]) + : client.CompleteChat(["Mock me!"]); - // Validate that network stream was disposed - this will show up as the - // the raw response holding an empty content stream. - PipelineResponse response = streamingResult.GetRawResponse(); - Assert.That(response.ContentStream.Length, Is.EqualTo(0)); + Assert.That(completion.Id, Is.EqualTo(mockResponseId)); + Assert.That(completion.CreatedAt.ToUnixTimeSeconds, Is.EqualTo(mockCreated)); + Assert.That(completion.Role, Is.EqualTo(ChatMessageRole.Assistant)); + Assert.That(completion.Content[0].Text, Is.EqualTo("Hi there, user!")); } [Test] - public async Task StreamingChatAsync() + public void CanCreateClients() { - ChatClient client = GetTestClient(TestScenario.Chat); - IEnumerable messages = [ - new UserChatMessage("What are the best pizza toppings? Give me a breakdown on the reasons.") - ]; - - TimeSpan? firstTokenReceiptTime = null; - TimeSpan? latestTokenReceiptTime = null; - Stopwatch stopwatch = Stopwatch.StartNew(); - - AsyncCollectionResult streamingResult = client.CompleteChatStreamingAsync(messages); - Assert.That(streamingResult, Is.InstanceOf>()); - int updateCount = 0; - ChatTokenUsage usage = null; + Uri fakeUri = new("https://127.0.0.1"); + ApiKeyCredential fakeCredential = new("sk-not-a-real-credential"); - await foreach (StreamingChatCompletionUpdate chatUpdate in streamingResult) { - firstTokenReceiptTime ??= stopwatch.Elapsed; - latestTokenReceiptTime = stopwatch.Elapsed; - usage ??= chatUpdate.Usage; - Console.WriteLine(stopwatch.Elapsed.TotalMilliseconds); - updateCount++; + OpenAIClient topLevelClient = new(fakeCredential); + Assert.That(topLevelClient, Is.Not.Null); + ChatClient chatClient = topLevelClient.GetChatClient("model"); + Assert.That(chatClient, Is.Not.Null); } - Assert.That(updateCount, Is.GreaterThan(1)); - Assert.That(latestTokenReceiptTime - firstTokenReceiptTime > TimeSpan.FromMilliseconds(500)); - Assert.That(usage, Is.Not.Null); - Assert.That(usage?.InputTokens, Is.GreaterThan(0)); - Assert.That(usage?.OutputTokens, Is.GreaterThan(0)); - Assert.That(usage.InputTokens + usage.OutputTokens, Is.EqualTo(usage.TotalTokens)); - - // Validate that network stream was disposed - this will show up as the - // the raw response holding an empty content stream. - PipelineResponse response = streamingResult.GetRawResponse(); - Assert.That(response.ContentStream.Length, Is.EqualTo(0)); - } - - #region Tools - private const string GetCurrentLocationFunctionName = "get_current_location"; - - private const string GetCurrentWeatherFunctionName = "get_current_weather"; - - private static readonly ChatTool getCurrentLocationFunction = ChatTool.CreateFunctionTool( - functionName: GetCurrentLocationFunctionName, - functionDescription: "Get the user's current location" - ); - - private static readonly ChatTool getCurrentWeatherFunction = ChatTool.CreateFunctionTool( - functionName: GetCurrentWeatherFunctionName, - functionDescription: "Get the current weather in a given location", - functionParameters: BinaryData.FromString(""" - { - "type": "object", - "properties": { - "location": { - "type": "string", - "description": "The city and state, e.g. Boston, MA" - }, - "unit": { - "type": "string", - "enum": [ "celsius", "fahrenheit" ], - "description": "The temperature unit to use. Infer this from the specified location." - } - }, - "required": [ "location" ] - } - """) - ); - #endregion - - private ClientResult GetStreamingMockUpdate() - { - MockPipelineResponse response = new(); - response.SetContent(""" - data: {"id":"chatcmpl-9OrT0Ib1h95fQhtdfsMC1Pn8arrXk", "object":"chat.completion.chunk", "created":1715712426, "model":"gpt-3.5-turbo-0125", "system_fingerprint":null, "choices":[ { "index":0, "delta":{ "role":"assistant", "content":null, "tool_calls":[ { "index":0, "id":"call_KTeiNDFMuy7BO18eMZnaXdpn", "type":"function", "function":{ "name":"get_current_weather", "arguments":"" } }, { "index":0, "id":"call_KTeiNDFMuy7BO18eMZnaXdpn", "type":"function", "function":{ "name":"get_current_weather", "arguments":"" } }, { "index":0, "id":"call_KTeiNDFMuy7BO18eMZnaXdpn", "type":"function", "function":{ "name":"get_current_weather", "arguments":"" } } ] }, "logprobs":null, "finish_reason":null } ], "usage":null } - - data: [DONE] - - - """); - return ClientResult.FromResponse(response); - } - - //[Test] - //public void MockStreamingChatWithToolsAsync() - //{ - // StreamingChatUpdateCollection updates = new(GetStreamingMockUpdate); - - // int updateCount = 0; - // foreach (StreamingChatUpdate chatUpdate in updates) - // { - // updateCount++; - // } - - // Assert.That(updateCount, Is.GreaterThan(1)); - //} - - [Test] - public async Task TwoTurnChat() - { - ChatClient client = GetTestClient(TestScenario.Chat); - - List messages = - [ - new UserChatMessage("In geometry, what are the different kinds of triangles, as defined by lengths of their sides?"), - ]; - ClientResult firstResult = IsAsync - ? await client.CompleteChatAsync(messages) - : client.CompleteChat(messages); - Assert.That(firstResult?.Value, Is.Not.Null); - Assert.That(firstResult.Value.Content[0].Text.ToLowerInvariant(), Contains.Substring("isosceles")); - messages.Add(new AssistantChatMessage(firstResult.Value)); - messages.Add(new UserChatMessage("Which of those is the one where exactly two sides are the same length?")); - ClientResult secondResult = client.CompleteChat(messages); - Assert.That(secondResult?.Value, Is.Not.Null); - Assert.That(secondResult.Value.Content[0].Text.ToLowerInvariant(), Contains.Substring("isosceles")); - } - - [Test] - public async Task AuthFailure() - { - string fakeApiKey = "not-a-real-key-but-should-be-sanitized"; - ChatClient client = new("gpt-3.5-turbo", new ApiKeyCredential(fakeApiKey)); - IEnumerable messages = [new UserChatMessage("Uh oh, this isn't going to work with that key")]; - ClientResultException clientResultException = null; - try { - _ = IsAsync - ? await client.CompleteChatAsync(messages) - : client.CompleteChat(messages); + OpenAIClient topLevelClient = new(fakeCredential, new OpenAIClientOptions() + { + Endpoint = fakeUri + }); + Assert.That(topLevelClient, Is.Not.Null); + ChatClient chatClient = topLevelClient.GetChatClient("model"); + Assert.That(chatClient, Is.Not.Null); } - catch (ClientResultException ex) { - clientResultException = ex; + ChatClient chatClient = new("model", fakeCredential); + Assert.That(chatClient, Is.Not.Null); + } + { + ChatClient chatClient = new("model", fakeCredential, new OpenAIClientOptions() + { + Endpoint = fakeUri + }); + Assert.That(chatClient, Is.Not.Null); } - Assert.That(clientResultException, Is.Not.Null); - Assert.That(clientResultException.Status, Is.EqualTo((int)HttpStatusCode.Unauthorized)); - Assert.That(clientResultException.Message, Does.Contain("API key")); - Assert.That(clientResultException.Message, Does.Not.Contain(fakeApiKey)); } [Test] - [Category("smoke")] public void AuthFailureStreaming() { string fakeApiKey = "not-a-real-key-but-should-be-sanitized"; - ChatClient client = new("gpt-3.5-turbo", new ApiKeyCredential(fakeApiKey)); + ChatClient client = new("gpt-4o-mini", new ApiKeyCredential(fakeApiKey)); Exception caughtException = null; try { @@ -266,117 +127,6 @@ [new UserChatMessage("Uh oh, this isn't going to work with that key")])) [Test] [TestCase(true)] [TestCase(false)] - public async Task TokenLogProbabilities(bool includeLogProbabilities) - { - const int topLogProbabilityCount = 3; - ChatClient client = new("gpt-3.5-turbo"); - IList messages = [new UserChatMessage("What are the best pizza toppings? Give me a breakdown on the reasons.")]; - ChatCompletionOptions options; - - if (includeLogProbabilities) - { - options = new() - { - IncludeLogProbabilities = true, - TopLogProbabilityCount = topLogProbabilityCount - }; - } - else - { - options = new(); - } - - ChatCompletion chatCompletions = await client.CompleteChatAsync(messages, options); - Assert.That(chatCompletions, Is.Not.Null); - - if (includeLogProbabilities) - { - IReadOnlyList chatTokenLogProbabilities = chatCompletions.ContentTokenLogProbabilities; - Assert.That(chatTokenLogProbabilities, Is.Not.Null.Or.Empty); - - foreach (ChatTokenLogProbabilityInfo tokenLogProbs in chatTokenLogProbabilities) - { - Assert.That(tokenLogProbs.Token, Is.Not.Null.Or.Empty); - Assert.That(tokenLogProbs.Utf8ByteValues, Is.Not.Null); - Assert.That(tokenLogProbs.TopLogProbabilities, Is.Not.Null.Or.Empty); - Assert.That(tokenLogProbs.TopLogProbabilities, Has.Count.EqualTo(topLogProbabilityCount)); - - foreach (ChatTokenTopLogProbabilityInfo tokenTopLogProbs in tokenLogProbs.TopLogProbabilities) - { - Assert.That(tokenTopLogProbs.Token, Is.Not.Null.Or.Empty); - Assert.That(tokenTopLogProbs.Utf8ByteValues, Is.Not.Null); - } - } - } - else - { - Assert.That(chatCompletions.ContentTokenLogProbabilities, Is.Not.Null); - Assert.That(chatCompletions.ContentTokenLogProbabilities, Is.Empty); - } - } - - [Test] - [TestCase(true)] - [TestCase(false)] - public async Task TokenLogProbabilitiesStreaming(bool includeLogProbabilities) - { - const int topLogProbabilityCount = 3; - ChatClient client = new("gpt-3.5-turbo"); - IList messages = [new UserChatMessage("What are the best pizza toppings? Give me a breakdown on the reasons.")]; - ChatCompletionOptions options; - - if (includeLogProbabilities) - { - options = new() - { - IncludeLogProbabilities = true, - TopLogProbabilityCount = topLogProbabilityCount - }; - } - else - { - options = new(); - } - - AsyncCollectionResult chatCompletionUpdates = client.CompleteChatStreamingAsync(messages, options); - Assert.That(chatCompletionUpdates, Is.Not.Null); - - await foreach (StreamingChatCompletionUpdate chatCompletionUpdate in chatCompletionUpdates) - { - // Token log probabilities are streamed together with their corresponding content update. - if (includeLogProbabilities - && chatCompletionUpdate.ContentUpdate.Count > 0 - && !string.IsNullOrWhiteSpace(chatCompletionUpdate.ContentUpdate[0].Text)) - { - Assert.That(chatCompletionUpdate.ContentTokenLogProbabilities, Is.Not.Null.Or.Empty); - Assert.That(chatCompletionUpdate.ContentTokenLogProbabilities, Has.Count.EqualTo(1)); - - foreach (ChatTokenLogProbabilityInfo tokenLogProbs in chatCompletionUpdate.ContentTokenLogProbabilities) - { - Assert.That(tokenLogProbs.Token, Is.Not.Null.Or.Empty); - Assert.That(tokenLogProbs.Utf8ByteValues, Is.Not.Null); - Assert.That(tokenLogProbs.TopLogProbabilities, Is.Not.Null.Or.Empty); - Assert.That(tokenLogProbs.TopLogProbabilities, Has.Count.EqualTo(topLogProbabilityCount)); - - foreach (ChatTokenTopLogProbabilityInfo tokenTopLogProbs in tokenLogProbs.TopLogProbabilities) - { - Assert.That(tokenTopLogProbs.Token, Is.Not.Null.Or.Empty); - Assert.That(tokenTopLogProbs.Utf8ByteValues, Is.Not.Null); - } - } - } - else - { - Assert.That(chatCompletionUpdate.ContentTokenLogProbabilities, Is.Not.Null); - Assert.That(chatCompletionUpdate.ContentTokenLogProbabilities, Is.Empty); - } - } - } - - [Test] - [TestCase(true)] - [TestCase(false)] - [Category("smoke")] public void SerializeChatToolChoiceAsString(bool fromRawJson) { ChatToolChoice choice; @@ -404,7 +154,6 @@ public void SerializeChatToolChoiceAsString(bool fromRawJson) [Test] [TestCase(true)] [TestCase(false)] - [Category("smoke")] public void SerializeChatToolChoiceAsObject(bool fromRawJson) { const string functionName = "my_function_name"; @@ -462,7 +211,6 @@ public void SerializeChatToolChoiceAsObject(bool fromRawJson) [Test] [TestCase(true)] [TestCase(false)] - [Category("smoke")] public void SerializeChatFunctionChoiceAsString(bool fromRawJson) { ChatFunctionChoice choice; @@ -490,7 +238,6 @@ public void SerializeChatFunctionChoiceAsString(bool fromRawJson) [Test] [TestCase(true)] [TestCase(false)] - [Category("smoke")] public void SerializeChatFunctionChoiceAsObject(bool fromRawJson) { const string functionName = "my_function_name"; @@ -538,7 +285,6 @@ public void SerializeChatFunctionChoiceAsObject(bool fromRawJson) [Test] [TestCase(true)] [TestCase(false)] - [Category("smoke")] public void SerializeChatMessageContentPartAsText(bool fromRawJson) { const string text = "Hello, world!"; @@ -590,7 +336,6 @@ public void SerializeChatMessageContentPartAsText(bool fromRawJson) [Test] [TestCase(true)] [TestCase(false)] - [Category("smoke")] public void SerializeChatMessageContentPartAsImageUri(bool fromRawJson) { const string uri = "https://avatars.githubusercontent.com/u/14957082"; @@ -654,7 +399,6 @@ public void SerializeChatMessageContentPartAsImageUri(bool fromRawJson) [Test] [TestCase(true)] [TestCase(false)] - [Category("smoke")] public void SerializeChatMessageContentPartAsImageBytes(bool fromRawJson) { string imageMediaType = "image/png"; @@ -726,107 +470,4 @@ public void SerializeChatMessageContentPartAsImageBytes(bool fromRawJson) Assert.That(additionalPropertyProperty.ValueKind, Is.EqualTo(JsonValueKind.True)); } } - - [Test] - public async Task JsonResult() - { - ChatClient client = GetTestClient(TestScenario.Chat); - IEnumerable messages = [ - new UserChatMessage("Give me a JSON object with the following properties: red, green, and blue. The value " - + "of each property should be a string containing their RGB representation in hexadecimal.") - ]; - ChatCompletionOptions options = new() { ResponseFormat = ChatResponseFormat.JsonObject }; - ClientResult result = IsAsync - ? await client.CompleteChatAsync(messages, options) - : client.CompleteChat(messages, options); - - JsonDocument jsonDocument = JsonDocument.Parse(result.Value.Content[0].Text); - - Assert.That(jsonDocument.RootElement.TryGetProperty("red", out JsonElement redProperty)); - Assert.That(jsonDocument.RootElement.TryGetProperty("green", out JsonElement greenProperty)); - Assert.That(jsonDocument.RootElement.TryGetProperty("blue", out JsonElement blueProperty)); - Assert.That(redProperty.GetString().ToLowerInvariant(), Contains.Substring("ff0000")); - Assert.That(greenProperty.GetString().ToLowerInvariant(), Contains.Substring("00ff00")); - Assert.That(blueProperty.GetString().ToLowerInvariant(), Contains.Substring("0000ff")); - } - - [Test] - [Category("smoke")] - public void CanCreateClients() - { - Uri fakeUri = new("https://127.0.0.1"); - ApiKeyCredential fakeCredential = new("sk-not-a-real-credential"); - - { - OpenAIClient topLevelClient = new(fakeCredential); - Assert.That(topLevelClient, Is.Not.Null); - ChatClient chatClient = topLevelClient.GetChatClient("model"); - Assert.That(chatClient, Is.Not.Null); - } - { - OpenAIClient topLevelClient = new(fakeCredential, new OpenAIClientOptions() - { - Endpoint = fakeUri - }); - Assert.That(topLevelClient, Is.Not.Null); - ChatClient chatClient = topLevelClient.GetChatClient("model"); - Assert.That(chatClient, Is.Not.Null); - } - { - ChatClient chatClient = new("model", fakeCredential); - Assert.That(chatClient, Is.Not.Null); - } - { - ChatClient chatClient = new("model", fakeCredential, new OpenAIClientOptions() - { - Endpoint = fakeUri - }); - Assert.That(chatClient, Is.Not.Null); - } - } - - [Test] - [Category("smoke")] - public async Task SmokeTest() - { - string mockResponseId = Guid.NewGuid().ToString(); - long mockCreated = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); - - BinaryData mockRequest = BinaryData.FromString($$""" - { - "model": "gpt-4o", - "messages": [ - { "role": "user", "content": "Hello, assistant!" } - ] - } - """); - BinaryData mockResponse = BinaryData.FromString($$""" - { - "id": "{{mockResponseId}}", - "created": {{mockCreated}}, - "choices": [ - { - "finish_reason": "stop", - "message": { "role": "assistant", "content": "Hi there, user!" } - } - ] - } - """); - MockPipelineTransport mockTransport = new(mockRequest, mockResponse); - - OpenAIClientOptions options = new() - { - Transport = mockTransport - }; - ChatClient client = new("model_name_replaced", new ApiKeyCredential("sk-not-a-real-key"), options); - - ChatCompletion completion = IsAsync - ? await client.CompleteChatAsync(["Mock me!"]) - : client.CompleteChat(["Mock me!"]); - - Assert.That(completion.Id, Is.EqualTo(mockResponseId)); - Assert.That(completion.CreatedAt.ToUnixTimeSeconds, Is.EqualTo(mockCreated)); - Assert.That(completion.Role, Is.EqualTo(ChatMessageRole.Assistant)); - Assert.That(completion.Content[0].Text, Is.EqualTo("Hi there, user!")); - } } diff --git a/tests/Chat/ChatTests.cs b/tests/Chat/ChatTests.cs new file mode 100644 index 000000000..5527c2d3d --- /dev/null +++ b/tests/Chat/ChatTests.cs @@ -0,0 +1,337 @@ +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using NUnit.Framework; +using OpenAI.Chat; +using OpenAI.Tests.Utility; +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Net; +using System.Text.Json; +using System.Threading.Tasks; +using static OpenAI.Tests.TestHelpers; + +namespace OpenAI.Tests.Chat; + +[TestFixture(true)] +[TestFixture(false)] +[Parallelizable(ParallelScope.All)] +[Category("Chat")] +public partial class ChatTests : SyncAsyncTestBase +{ + public ChatTests(bool isAsync) : base(isAsync) + { + } + + [Test] + public async Task HelloWorldChat() + { + ChatClient client = GetTestClient(TestScenario.Chat); + IEnumerable messages = [new UserChatMessage("Hello, world!")]; + ClientResult result = IsAsync + ? await client.CompleteChatAsync(messages) + : client.CompleteChat(messages); + Assert.That(result, Is.InstanceOf>()); + Assert.That(result.Value.Content[0].Kind, Is.EqualTo(ChatMessageContentPartKind.Text)); + Assert.That(result.Value.Content[0].Text.Length, Is.GreaterThan(0)); + } + + [Test] + public async Task HelloWorldWithTopLevelClient() + { + OpenAIClient client = GetTestClient(TestScenario.TopLevel); + ChatClient chatClient = client.GetChatClient("gpt-4o-mini"); + IEnumerable messages = [new UserChatMessage("Hello, world!")]; + ClientResult result = IsAsync + ? await chatClient.CompleteChatAsync(messages) + : chatClient.CompleteChat(messages); + Assert.That(result.Value.Content[0].Text.Length, Is.GreaterThan(0)); + } + + [Test] + public async Task MultiMessageChat() + { + ChatClient client = GetTestClient(TestScenario.Chat); + IEnumerable messages = [ + new SystemChatMessage("You are a helpful assistant. You always talk like a pirate."), + new UserChatMessage("Hello, assistant! Can you help me train my parrot?"), + ]; + ClientResult result = IsAsync + ? await client.CompleteChatAsync(messages) + : client.CompleteChat(messages); + Assert.That(new string[] { "aye", "arr", "hearty" }.Any(pirateWord => result.Value.Content[0].Text.ToLowerInvariant().Contains(pirateWord))); + } + + [Test] + public void StreamingChat() + { + ChatClient client = GetTestClient(TestScenario.Chat); + IEnumerable messages = [ + new UserChatMessage("What are the best pizza toppings? Give me a breakdown on the reasons.") + ]; + + TimeSpan? firstTokenReceiptTime = null; + TimeSpan? latestTokenReceiptTime = null; + Stopwatch stopwatch = Stopwatch.StartNew(); + + CollectionResult streamingResult = client.CompleteChatStreaming(messages); + Assert.That(streamingResult, Is.InstanceOf>()); + int updateCount = 0; + + foreach (StreamingChatCompletionUpdate chatUpdate in streamingResult) + { + firstTokenReceiptTime ??= stopwatch.Elapsed; + latestTokenReceiptTime = stopwatch.Elapsed; + Console.WriteLine(stopwatch.Elapsed.TotalMilliseconds); + updateCount++; + } + Assert.That(updateCount, Is.GreaterThan(1)); + Assert.That(latestTokenReceiptTime - firstTokenReceiptTime > TimeSpan.FromMilliseconds(500)); + + // Validate that network stream was disposed - this will show up as the + // the raw response holding an empty content stream. + PipelineResponse response = streamingResult.GetRawResponse(); + Assert.That(response.ContentStream.Length, Is.EqualTo(0)); + } + + [Test] + public async Task StreamingChatAsync() + { + ChatClient client = GetTestClient(TestScenario.Chat); + IEnumerable messages = [ + new UserChatMessage("What are the best pizza toppings? Give me a breakdown on the reasons.") + ]; + + TimeSpan? firstTokenReceiptTime = null; + TimeSpan? latestTokenReceiptTime = null; + Stopwatch stopwatch = Stopwatch.StartNew(); + + AsyncCollectionResult streamingResult = client.CompleteChatStreamingAsync(messages); + Assert.That(streamingResult, Is.InstanceOf>()); + int updateCount = 0; + ChatTokenUsage usage = null; + + await foreach (StreamingChatCompletionUpdate chatUpdate in streamingResult) + { + firstTokenReceiptTime ??= stopwatch.Elapsed; + latestTokenReceiptTime = stopwatch.Elapsed; + usage ??= chatUpdate.Usage; + Console.WriteLine(stopwatch.Elapsed.TotalMilliseconds); + updateCount++; + } + Assert.That(updateCount, Is.GreaterThan(1)); + Assert.That(latestTokenReceiptTime - firstTokenReceiptTime > TimeSpan.FromMilliseconds(500)); + Assert.That(usage, Is.Not.Null); + Assert.That(usage?.InputTokens, Is.GreaterThan(0)); + Assert.That(usage?.OutputTokens, Is.GreaterThan(0)); + Assert.That(usage.InputTokens + usage.OutputTokens, Is.EqualTo(usage.TotalTokens)); + + // Validate that network stream was disposed - this will show up as the + // the raw response holding an empty content stream. + PipelineResponse response = streamingResult.GetRawResponse(); + Assert.That(response.ContentStream.Length, Is.EqualTo(0)); + } + + [Test] + public async Task TwoTurnChat() + { + ChatClient client = GetTestClient(TestScenario.Chat); + + List messages = + [ + new UserChatMessage("In geometry, what are the different kinds of triangles, as defined by lengths of their sides?"), + ]; + ClientResult firstResult = IsAsync + ? await client.CompleteChatAsync(messages) + : client.CompleteChat(messages); + Assert.That(firstResult?.Value, Is.Not.Null); + Assert.That(firstResult.Value.Content[0].Text.ToLowerInvariant(), Contains.Substring("isosceles")); + messages.Add(new AssistantChatMessage(firstResult.Value)); + messages.Add(new UserChatMessage("Which of those is the one where exactly two sides are the same length?")); + ClientResult secondResult = client.CompleteChat(messages); + Assert.That(secondResult?.Value, Is.Not.Null); + Assert.That(secondResult.Value.Content[0].Text.ToLowerInvariant(), Contains.Substring("isosceles")); + } + + [Test] + public async Task ChatWithVision() + { + string mediaType = "image/png"; + string filePath = Path.Combine("Assets", "images_dog_and_cat.png"); + using Stream stream = File.OpenRead(filePath); + BinaryData imageData = BinaryData.FromStream(stream); + + ChatClient client = GetTestClient(TestScenario.Chat); + IEnumerable messages = [ + new UserChatMessage( + ChatMessageContentPart.CreateTextMessageContentPart("Describe this image for me."), + ChatMessageContentPart.CreateImageMessageContentPart(imageData, mediaType)), + ]; + ChatCompletionOptions options = new() { MaxTokens = 2048 }; + + ClientResult result = IsAsync + ? await client.CompleteChatAsync(messages, options) + : client.CompleteChat(messages, options); + Console.WriteLine(result.Value.Content[0].Text); + Assert.That(result.Value.Content[0].Text.ToLowerInvariant(), Does.Contain("dog").Or.Contain("cat").IgnoreCase); + } + + [Test] + public async Task AuthFailure() + { + string fakeApiKey = "not-a-real-key-but-should-be-sanitized"; + ChatClient client = new("gpt-4o-mini", new ApiKeyCredential(fakeApiKey)); + IEnumerable messages = [new UserChatMessage("Uh oh, this isn't going to work with that key")]; + ClientResultException clientResultException = null; + try + { + _ = IsAsync + ? await client.CompleteChatAsync(messages) + : client.CompleteChat(messages); + } + catch (ClientResultException ex) + { + clientResultException = ex; + } + Assert.That(clientResultException, Is.Not.Null); + Assert.That(clientResultException.Status, Is.EqualTo((int)HttpStatusCode.Unauthorized)); + Assert.That(clientResultException.Message, Does.Contain("API key")); + Assert.That(clientResultException.Message, Does.Not.Contain(fakeApiKey)); + } + + [Test] + [TestCase(true)] + [TestCase(false)] + public async Task TokenLogProbabilities(bool includeLogProbabilities) + { + const int topLogProbabilityCount = 3; + ChatClient client = GetTestClient(TestScenario.Chat); + IList messages = [new UserChatMessage("What are the best pizza toppings? Give me a breakdown on the reasons.")]; + ChatCompletionOptions options; + + if (includeLogProbabilities) + { + options = new() + { + IncludeLogProbabilities = true, + TopLogProbabilityCount = topLogProbabilityCount + }; + } + else + { + options = new(); + } + + ChatCompletion chatCompletions = await client.CompleteChatAsync(messages, options); + Assert.That(chatCompletions, Is.Not.Null); + + if (includeLogProbabilities) + { + IReadOnlyList chatTokenLogProbabilities = chatCompletions.ContentTokenLogProbabilities; + Assert.That(chatTokenLogProbabilities, Is.Not.Null.Or.Empty); + + foreach (ChatTokenLogProbabilityInfo tokenLogProbs in chatTokenLogProbabilities) + { + Assert.That(tokenLogProbs.Token, Is.Not.Null.Or.Empty); + Assert.That(tokenLogProbs.Utf8ByteValues, Is.Not.Null); + Assert.That(tokenLogProbs.TopLogProbabilities, Is.Not.Null.Or.Empty); + Assert.That(tokenLogProbs.TopLogProbabilities, Has.Count.EqualTo(topLogProbabilityCount)); + + foreach (ChatTokenTopLogProbabilityInfo tokenTopLogProbs in tokenLogProbs.TopLogProbabilities) + { + Assert.That(tokenTopLogProbs.Token, Is.Not.Null.Or.Empty); + Assert.That(tokenTopLogProbs.Utf8ByteValues, Is.Not.Null); + } + } + } + else + { + Assert.That(chatCompletions.ContentTokenLogProbabilities, Is.Not.Null); + Assert.That(chatCompletions.ContentTokenLogProbabilities, Is.Empty); + } + } + + [Test] + [TestCase(true)] + [TestCase(false)] + public async Task TokenLogProbabilitiesStreaming(bool includeLogProbabilities) + { + const int topLogProbabilityCount = 3; + ChatClient client = GetTestClient(TestScenario.Chat); + IList messages = [new UserChatMessage("What are the best pizza toppings? Give me a breakdown on the reasons.")]; + ChatCompletionOptions options; + + if (includeLogProbabilities) + { + options = new() + { + IncludeLogProbabilities = true, + TopLogProbabilityCount = topLogProbabilityCount + }; + } + else + { + options = new(); + } + + AsyncCollectionResult chatCompletionUpdates = client.CompleteChatStreamingAsync(messages, options); + Assert.That(chatCompletionUpdates, Is.Not.Null); + + await foreach (StreamingChatCompletionUpdate chatCompletionUpdate in chatCompletionUpdates) + { + // Token log probabilities are streamed together with their corresponding content update. + if (includeLogProbabilities + && chatCompletionUpdate.ContentUpdate.Count > 0 + && !string.IsNullOrEmpty(chatCompletionUpdate.ContentUpdate[0].Text)) + { + Assert.That(chatCompletionUpdate.ContentTokenLogProbabilities, Is.Not.Null.Or.Empty); + Assert.That(chatCompletionUpdate.ContentTokenLogProbabilities, Has.Count.EqualTo(1)); + + foreach (ChatTokenLogProbabilityInfo tokenLogProbs in chatCompletionUpdate.ContentTokenLogProbabilities) + { + Assert.That(tokenLogProbs.Token, Is.Not.Null.Or.Empty); + Assert.That(tokenLogProbs.Utf8ByteValues, Is.Not.Null); + Assert.That(tokenLogProbs.TopLogProbabilities, Is.Not.Null.Or.Empty); + Assert.That(tokenLogProbs.TopLogProbabilities, Has.Count.EqualTo(topLogProbabilityCount)); + + foreach (ChatTokenTopLogProbabilityInfo tokenTopLogProbs in tokenLogProbs.TopLogProbabilities) + { + Assert.That(tokenTopLogProbs.Token, Is.Not.Null.Or.Empty); + Assert.That(tokenTopLogProbs.Utf8ByteValues, Is.Not.Null); + } + } + } + else + { + Assert.That(chatCompletionUpdate.ContentTokenLogProbabilities, Is.Not.Null); + Assert.That(chatCompletionUpdate.ContentTokenLogProbabilities, Is.Empty); + } + } + } + + [Test] + public async Task JsonResult() + { + ChatClient client = GetTestClient(TestScenario.Chat); + IEnumerable messages = [ + new UserChatMessage("Give me a JSON object with the following properties: red, green, and blue. The value " + + "of each property should be a string containing their RGB representation in hexadecimal.") + ]; + ChatCompletionOptions options = new() { ResponseFormat = ChatResponseFormat.JsonObject }; + ClientResult result = IsAsync + ? await client.CompleteChatAsync(messages, options) + : client.CompleteChat(messages, options); + + JsonDocument jsonDocument = JsonDocument.Parse(result.Value.Content[0].Text); + + Assert.That(jsonDocument.RootElement.TryGetProperty("red", out JsonElement redProperty)); + Assert.That(jsonDocument.RootElement.TryGetProperty("green", out JsonElement greenProperty)); + Assert.That(jsonDocument.RootElement.TryGetProperty("blue", out JsonElement blueProperty)); + Assert.That(redProperty.GetString().ToLowerInvariant(), Contains.Substring("ff0000")); + Assert.That(greenProperty.GetString().ToLowerInvariant(), Contains.Substring("00ff00")); + Assert.That(blueProperty.GetString().ToLowerInvariant(), Contains.Substring("0000ff")); + } +} diff --git a/tests/Chat/ChatToolTests.cs b/tests/Chat/ChatToolTests.cs index 7d1d898b2..8481b8769 100644 --- a/tests/Chat/ChatToolTests.cs +++ b/tests/Chat/ChatToolTests.cs @@ -15,10 +15,10 @@ namespace OpenAI.Tests.Chat; [TestFixture(true)] [TestFixture(false)] [Parallelizable(ParallelScope.All)] +[Category("Chat")] public partial class ChatToolTests : SyncAsyncTestBase { - public ChatToolTests(bool isAsync) - : base(isAsync) + public ChatToolTests(bool isAsync) : base(isAsync) { } diff --git a/tests/Chat/ChatWithVision.cs b/tests/Chat/ChatWithVision.cs deleted file mode 100644 index f8328c7fe..000000000 --- a/tests/Chat/ChatWithVision.cs +++ /dev/null @@ -1,45 +0,0 @@ -using NUnit.Framework; -using OpenAI.Chat; -using OpenAI.Tests.Utility; -using System; -using System.ClientModel; -using System.Collections.Generic; -using System.IO; -using System.Threading.Tasks; -using static OpenAI.Tests.TestHelpers; - -namespace OpenAI.Tests.Chat; - -[TestFixture(true)] -[TestFixture(false)] -[Parallelizable(ParallelScope.All)] -public partial class ChatWithVision : SyncAsyncTestBase -{ - public ChatWithVision(bool isAsync) - : base(isAsync) - { - } - - [Test] - public async Task DescribeAnImage() - { - string mediaType = "image/png"; - string filePath = Path.Combine("Assets", "images_dog_and_cat.png"); - using Stream stream = File.OpenRead(filePath); - BinaryData imageData = BinaryData.FromStream(stream); - - ChatClient client = GetTestClient(TestScenario.VisionChat); - IEnumerable messages = [ - new UserChatMessage( - ChatMessageContentPart.CreateTextMessageContentPart("Describe this image for me."), - ChatMessageContentPart.CreateImageMessageContentPart(imageData, mediaType)), - ]; - ChatCompletionOptions options = new() { MaxTokens = 2048 }; - - ClientResult result = IsAsync - ? await client.CompleteChatAsync(messages, options) - : client.CompleteChat(messages, options); - Console.WriteLine(result.Value.Content[0].Text); - Assert.That(result.Value.Content[0].Text.ToLowerInvariant(), Contains.Substring("dog")); - } -} diff --git a/tests/Embeddings/EmbeddingTests.cs b/tests/Embeddings/EmbeddingTests.cs index e9d449741..a20f6b9b2 100644 --- a/tests/Embeddings/EmbeddingTests.cs +++ b/tests/Embeddings/EmbeddingTests.cs @@ -1,8 +1,8 @@ -using System; -using System.ClientModel; -using NUnit.Framework; +using NUnit.Framework; using OpenAI.Embeddings; using OpenAI.Tests.Utility; +using System; +using System.ClientModel; using System.Collections.Generic; using System.Threading.Tasks; using static OpenAI.Tests.TestHelpers; @@ -12,10 +12,10 @@ namespace OpenAI.Tests.Embeddings; [TestFixture(true)] [TestFixture(false)] [Parallelizable(ParallelScope.All)] +[Category("Embeddings")] public partial class EmbeddingTests : SyncAsyncTestBase { - public EmbeddingTests(bool isAsync) - : base(isAsync) + public EmbeddingTests(bool isAsync) : base(isAsync) { } diff --git a/tests/Files/FileTests.cs b/tests/Files/FileTests.cs index be2433f6f..0484c9ee3 100644 --- a/tests/Files/FileTests.cs +++ b/tests/Files/FileTests.cs @@ -11,10 +11,10 @@ namespace OpenAI.Tests.Files; [TestFixture(true)] [TestFixture(false)] [Parallelizable(ParallelScope.Fixtures)] +[Category("Files")] public partial class FileTests : SyncAsyncTestBase { - public FileTests(bool isAsync) - : base(isAsync) + public FileTests(bool isAsync) : base(isAsync) { } diff --git a/tests/FineTuning/FineTuningTests.cs b/tests/FineTuning/FineTuningTests.cs new file mode 100644 index 000000000..f7d5f978e --- /dev/null +++ b/tests/FineTuning/FineTuningTests.cs @@ -0,0 +1,89 @@ +using NUnit.Framework; +using OpenAI.Files; +using OpenAI.FineTuning; +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using static OpenAI.Tests.TestHelpers; + +namespace OpenAI.Tests.FineTuning; + +#pragma warning disable OPENAI001 + +[Parallelizable(ParallelScope.Fixtures)] +public partial class FineTuningTests +{ + [Test] + public void BasicFineTuningOperationsWork() + { + // Upload training file first + FileClient fileClient = GetTestClient(TestScenario.Files); + string filename = "toy_chat.jsonl"; + BinaryData fileContent = BinaryData.FromString(""" + {"messages": [{"role": "user", "content": "I lost my book today."}, {"role": "assistant", "content": "You can read everything on ebooks these days!"}]} + {"messages": [{"role": "system", "content": "You are a happy assistant that puts a positive spin on everything."}, {"role": "assistant", "content": "You're great!"}]} + """); + OpenAIFileInfo uploadedFile = fileClient.UploadFile(fileContent, filename, FileUploadPurpose.FineTune); + Assert.That(uploadedFile?.Filename, Is.EqualTo(filename)); + + // Submit fine-tuning job + FineTuningClient client = GetTestClient(); + + string json = $"{{\"training_file\":\"{uploadedFile.Id}\",\"model\":\"gpt-3.5-turbo\"}}"; + BinaryData input = BinaryData.FromString(json); + using BinaryContent content = BinaryContent.Create(input); + + ClientResult result = client.CreateJob(content); + } + + [OneTimeTearDown] + protected void Cleanup() + { + // Skip cleanup if there is no API key (e.g., if we are not running live tests). + if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("OPEN_API_KEY"))) + { + return; + } + + FileClient fileClient = new(); + RequestOptions requestOptions = new() + { + ErrorOptions = ClientErrorBehaviors.NoThrow, + }; + foreach (OpenAIFileInfo file in _filesToDelete) + { + Console.WriteLine($"Cleanup: {file.Id} -> {fileClient.DeleteFile(file.Id, requestOptions)?.GetRawResponse().Status}"); + } + _filesToDelete.Clear(); + } + + /// + /// Performs basic, invariant validation of a target that was just instantiated from its corresponding origination + /// mechanism. If applicable, the instance is recorded into the test run for cleanup of persistent resources. + /// + /// Instance type being validated. + /// The instance to validate. + /// The provided instance type isn't supported. + private void Validate(T target) + { + if (target is OpenAIFileInfo file) + { + Assert.That(file?.Id, Is.Not.Null); + _filesToDelete.Add(file); + } + else + { + throw new NotImplementedException($"{nameof(Validate)} helper not implemented for: {typeof(T)}"); + } + } + + private readonly List _filesToDelete = []; + + private static FineTuningClient GetTestClient() => GetTestClient(TestScenario.FineTuning); + + private static readonly DateTimeOffset s_2024 = new(2024, 1, 1, 0, 0, 0, TimeSpan.Zero); + private static readonly string s_cleanupMetadataKey = $"test_metadata_cleanup_eligible"; +} + +#pragma warning restore OPENAI001 diff --git a/tests/Images/ImageGenerationTests.cs b/tests/Images/ImageGenerationTests.cs index a7ec1fb14..efc95c544 100644 --- a/tests/Images/ImageGenerationTests.cs +++ b/tests/Images/ImageGenerationTests.cs @@ -14,18 +14,17 @@ namespace OpenAI.Tests.Images; [TestFixture(true)] [TestFixture(false)] [Parallelizable(ParallelScope.All)] +[Category("Images")] public partial class ImageGenerationTests : SyncAsyncTestBase { - public ImageGenerationTests(bool isAsync) - : base(isAsync) + public ImageGenerationTests(bool isAsync) : base(isAsync) { } [Test] - [Category("skipInCI")] public async Task BasicGenerationWorks() { - ImageClient client = GetTestClient(); + ImageClient client = GetTestClient(TestScenario.Images); string prompt = "An isolated stop sign."; @@ -40,10 +39,9 @@ public async Task BasicGenerationWorks() } [Test] - [Category("skipInCI")] public async Task GenerationWithOptionsWorks() { - ImageClient client = GetTestClient(); + ImageClient client = GetTestClient(TestScenario.Images); string prompt = "An isolated stop sign."; @@ -60,10 +58,9 @@ public async Task GenerationWithOptionsWorks() } [Test] - [Category("skipInCI")] public async Task GenerationWithBytesResponseWorks() { - ImageClient client = GetTestClient(); + ImageClient client = GetTestClient(TestScenario.Images); string prompt = "An isolated stop sign."; @@ -82,7 +79,6 @@ public async Task GenerationWithBytesResponseWorks() } [Test] - [Category("skipInCI")] public async Task GenerateImageEditWorks() { ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); @@ -102,7 +98,6 @@ public async Task GenerateImageEditWorks() } [Test] - [Category("skipInCI")] public async Task GenerateImageEditWithMaskFileWorks() { ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); @@ -123,7 +118,6 @@ public async Task GenerateImageEditWithMaskFileWorks() } [Test] - [Category("skipInCI")] public async Task GenerateImageEditWithBytesResponseWorks() { ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); @@ -142,11 +136,10 @@ public async Task GenerateImageEditWithBytesResponseWorks() Assert.That(image.ImageUri, Is.Null); Assert.That(image.ImageBytes, Is.Not.Null); - ValidateGeneratedImage(image.ImageBytes, "cat"); + ValidateGeneratedImage(image.ImageBytes, "cat", "Note that it likely depicts some sort of animal."); } [Test] - [Category("skipInCI")] public async Task GenerateImageVariationWorks() { ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); @@ -160,11 +153,10 @@ public async Task GenerateImageVariationWorks() Console.WriteLine(image.ImageUri.AbsoluteUri); - ValidateGeneratedImage(image.ImageUri, "dog"); + ValidateGeneratedImage(image.ImageUri, "cat", "Note that it likely depicts some sort of animal."); } [Test] - [Category("skipInCI")] public async Task GenerateImageVariationWithBytesResponseWorks() { ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); @@ -181,15 +173,15 @@ public async Task GenerateImageVariationWithBytesResponseWorks() Assert.That(image.ImageUri, Is.Null); Assert.That(image.ImageBytes, Is.Not.Null); - ValidateGeneratedImage(image.ImageBytes, "cat"); + ValidateGeneratedImage(image.ImageBytes, "cat", "Note that it likely depicts some sort of animal."); } - private void ValidateGeneratedImage(Uri imageUri, string expectedSubstring) + private void ValidateGeneratedImage(Uri imageUri, string expectedSubstring, string descriptionHint = null) { - ChatClient chatClient = GetTestClient(TestScenario.VisionChat); + ChatClient chatClient = GetTestClient(TestScenario.Chat); IEnumerable messages = [ new UserChatMessage( - ChatMessageContentPart.CreateTextMessageContentPart("Describe this image for me."), + ChatMessageContentPart.CreateTextMessageContentPart($"Describe this image for me. {descriptionHint}"), ChatMessageContentPart.CreateImageMessageContentPart(imageUri)), ]; ChatCompletionOptions chatOptions = new() { MaxTokens = 2048 }; @@ -198,12 +190,12 @@ private void ValidateGeneratedImage(Uri imageUri, string expectedSubstring) Assert.That(result.Value.Content[0].Text.ToLowerInvariant(), Contains.Substring(expectedSubstring)); } - private void ValidateGeneratedImage(BinaryData imageBytes, string expectedSubstring) + private void ValidateGeneratedImage(BinaryData imageBytes, string expectedSubstring, string descriptionHint = null) { - ChatClient chatClient = GetTestClient(TestScenario.VisionChat); + ChatClient chatClient = GetTestClient(TestScenario.Chat); IEnumerable messages = [ new UserChatMessage( - ChatMessageContentPart.CreateTextMessageContentPart("Describe this image for me."), + ChatMessageContentPart.CreateTextMessageContentPart($"Describe this image for me. {descriptionHint}"), ChatMessageContentPart.CreateImageMessageContentPart(imageBytes, "image/png")), ]; ChatCompletionOptions chatOptions = new() { MaxTokens = 2048 }; @@ -211,6 +203,4 @@ private void ValidateGeneratedImage(BinaryData imageBytes, string expectedSubstr Assert.That(result.Value.Content[0].Text.ToLowerInvariant(), Contains.Substring(expectedSubstring)); } - - private static ImageClient GetTestClient() => GetTestClient(TestScenario.Images); } diff --git a/tests/Models/ModelTests.cs b/tests/Models/ModelTests.cs index 836c3f47e..92bbaf887 100644 --- a/tests/Models/ModelTests.cs +++ b/tests/Models/ModelTests.cs @@ -10,10 +10,10 @@ namespace OpenAI.Tests.Models; [TestFixture(true)] [TestFixture(false)] [Parallelizable(ParallelScope.All)] +[Category("Models")] public partial class ModelTests : SyncAsyncTestBase { - public ModelTests(bool isAsync) - : base(isAsync) + public ModelTests(bool isAsync) : base(isAsync) { } @@ -35,11 +35,13 @@ public async Task GetModelInfo() { ModelClient client = new(); + string modelName = "gpt-4o-mini"; + OpenAIModelInfo model = IsAsync - ? await client.GetModelAsync("gpt-3.5-turbo") - : client.GetModel("gpt-3.5-turbo"); + ? await client.GetModelAsync(modelName) + : client.GetModel(modelName); Assert.That(model, Is.Not.Null); - Assert.That(model.OwnedBy.ToLowerInvariant(), Contains.Substring("openai")); + Assert.That(model.OwnedBy.ToLowerInvariant(), Does.Contain("system")); } [Test] diff --git a/tests/Moderations/ModerationTests.cs b/tests/Moderations/ModerationTests.cs index 0d10a8362..3c10fbfab 100644 --- a/tests/Moderations/ModerationTests.cs +++ b/tests/Moderations/ModerationTests.cs @@ -9,15 +9,14 @@ namespace OpenAI.Tests.Moderations; [TestFixture(true)] [TestFixture(false)] [Parallelizable(ParallelScope.All)] +[Category("Moderations")] public partial class ModerationTests : SyncAsyncTestBase { - public ModerationTests(bool isAsync) - : base(isAsync) + public ModerationTests(bool isAsync) : base(isAsync) { } [Test] - [Category("skipInCI")] public async Task ClassifySingleInput() { ModerationClient client = new("text-moderation-stable"); @@ -34,7 +33,6 @@ public async Task ClassifySingleInput() } [Test] - [Category("skipInCI")] public async Task ClassifyMultipleInputs() { ModerationClient client = new("text-moderation-stable"); diff --git a/tests/OpenAI.Tests.csproj b/tests/OpenAI.Tests.csproj index b33b036ea..9c4038587 100644 --- a/tests/OpenAI.Tests.csproj +++ b/tests/OpenAI.Tests.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -14,5 +14,6 @@ + \ No newline at end of file diff --git a/tests/Utility/System.Net.ServerSentEvents.cs b/tests/Utility/System.Net.ServerSentEvents.cs new file mode 100644 index 000000000..ea0b4f818 --- /dev/null +++ b/tests/Utility/System.Net.ServerSentEvents.cs @@ -0,0 +1,623 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// This file contains a source copy of: +// https://github.com/dotnet/runtime/tree/2bd15868f12ace7cee9999af61d5c130b2603f04/src/libraries/System.Net.ServerSentEvents/src/System/Net/ServerSentEvents +// Once the System.Net.ServerSentEvents package is available, this file should be removed and replaced with a package reference. +// +// The only changes made to this code from the original are: +// - Enabled nullable reference types at file scope, and use a few null suppression operators to work around the lack of [NotNull] +// - Put into a single file for ease of management (it should not be edited in this repo). +// - Changed public types to be internal. +// - Removed a use of a [NotNull] attribute to assist in netstandard2.0 compilation. +// - Replaced a reference to a .resx string with an inline constant. + +#nullable enable + +using System.Buffers; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; +using System.Threading; + +namespace System.Net.ServerSentEvents +{ + /// Represents a server-sent event. + /// Specifies the type of data payload in the event. + internal readonly struct SseItem + { + /// Initializes the server-sent event. + /// The event's payload. + /// The event's type. + public SseItem(T data, string eventType) + { + Data = data; + EventType = eventType; + } + + /// Gets the event's payload. + public T Data { get; } + + /// Gets the event's type. + public string EventType { get; } + } + + /// Encapsulates a method for parsing the bytes payload of a server-sent event. + /// Specifies the type of the return value of the parser. + /// The event's type. + /// The event's payload bytes. + /// The parsed . + internal delegate T SseItemParser(string eventType, ReadOnlySpan data); + + /// Provides a parser for parsing server-sent events. + internal static class SseParser + { + /// The default ("message") for an event that did not explicitly specify a type. + public const string EventTypeDefault = "message"; + + /// Creates a parser for parsing a of server-sent events into a sequence of values. + /// The stream containing the data to parse. + /// + /// The enumerable of strings, which may be enumerated synchronously or asynchronously. The strings + /// are decoded from the UTF8-encoded bytes of the payload of each event. + /// + /// is null. + /// + /// This overload has behavior equivalent to calling with a delegate + /// that decodes the data of each event using 's GetString method. + /// + public static SseParser Create(Stream sseStream) => + Create(sseStream, static (_, bytes) => Utf8GetString(bytes)); + + /// Creates a parser for parsing a of server-sent events into a sequence of values. + /// Specifies the type of data in each event. + /// The stream containing the data to parse. + /// The parser to use to transform each payload of bytes into a data element. + /// The enumerable, which may be enumerated synchronously or asynchronously. + /// is null. + /// is null. + public static SseParser Create(Stream sseStream, SseItemParser itemParser) => + new SseParser( + sseStream ?? throw new ArgumentNullException(nameof(sseStream)), + itemParser ?? throw new ArgumentNullException(nameof(itemParser))); + + /// Encoding.UTF8.GetString(bytes) + internal static string Utf8GetString(ReadOnlySpan bytes) + { +#if NET + return Encoding.UTF8.GetString(bytes); +#else + unsafe + { + fixed (byte* ptr = bytes) + { + return ptr is null ? + string.Empty : + Encoding.UTF8.GetString(ptr, bytes.Length); + } + } +#endif + } + } + + /// Provides a parser for server-sent events information. + /// Specifies the type of data parsed from an event. + internal sealed class SseParser + { + // For reference: + // Specification: https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events + + /// Carriage Return. + private const byte CR = (byte)'\r'; + /// Line Feed. + private const byte LF = (byte)'\n'; + /// Carriage Return Line Feed. + private static ReadOnlySpan CRLF => "\r\n"u8; + + /// The default size of an ArrayPool buffer to rent. + /// Larger size used by default to minimize number of reads. Smaller size used in debug to stress growth/shifting logic. + private const int DefaultArrayPoolRentSize = +#if DEBUG + 16; +#else + 1024; +#endif + + /// The stream to be parsed. + private readonly Stream _stream; + /// The parser delegate used to transform bytes into a . + private readonly SseItemParser _itemParser; + + /// Indicates whether the enumerable has already been used for enumeration. + private int _used; + + /// Buffer, either empty or rented, containing the data being read from the stream while looking for the next line. + private byte[] _lineBuffer = []; + /// The starting offset of valid data in . + private int _lineOffset; + /// The length of valid data in , starting from . + private int _lineLength; + /// The index in where a newline ('\r', '\n', or "\r\n") was found. + private int _newlineIndex; + /// The index in of characters already checked for newlines. + /// + /// This is to avoid O(LineLength^2) behavior in the rare case where we have long lines that are built-up over multiple reads. + /// We want to avoid re-checking the same characters we've already checked over and over again. + /// + private int _lastSearchedForNewline; + /// Set when eof has been reached in the stream. + private bool _eof; + + /// Rented buffer containing buffered data for the next event. + private byte[]? _dataBuffer; + /// The length of valid data in , starting from index 0. + private int _dataLength; + /// Whether data has been appended to . + /// This can be different than != 0 if empty data was appended. + private bool _dataAppended; + + /// The event type for the next event. + private string _eventType = SseParser.EventTypeDefault; + + /// Initialize the enumerable. + /// The stream to parse. + /// The function to use to parse payload bytes into a . + internal SseParser(Stream stream, SseItemParser itemParser) + { + _stream = stream; + _itemParser = itemParser; + } + + /// Gets an enumerable of the server-sent events from this parser. + /// The parser has already been enumerated. Such an exception may propagate out of a call to . + public IEnumerable> Enumerate() + { + // Validate that the parser is only used for one enumeration. + ThrowIfNotFirstEnumeration(); + + // Rent a line buffer. This will grow as needed. The line buffer is what's passed to the stream, + // so we want it to be large enough to reduce the number of reads we need to do when data is + // arriving quickly. (In debug, we use a smaller buffer to stress the growth and shifting logic.) + _lineBuffer = ArrayPool.Shared.Rent(DefaultArrayPoolRentSize); + try + { + // Spec: "Event streams in this format must always be encoded as UTF-8". + // Skip a UTF8 BOM if it exists at the beginning of the stream. (The BOM is defined as optional in the SSE grammar.) + while (FillLineBuffer() != 0 && _lineLength < Utf8Bom.Length) ; + SkipBomIfPresent(); + + // Process all events in the stream. + while (true) + { + // See if there's a complete line in data already read from the stream. Lines are permitted to + // end with CR, LF, or CRLF. Look for all of them and if we find one, process the line. However, + // if we only find a CR and it's at the end of the read data, don't process it now, as we want + // to process it together with an LF that might immediately follow, rather than treating them + // as two separate characters, in which case we'd incorrectly process the CR as a line by itself. + GetNextSearchOffsetAndLength(out int searchOffset, out int searchLength); + _newlineIndex = _lineBuffer.AsSpan(searchOffset, searchLength).IndexOfAny(CR, LF); + if (_newlineIndex >= 0) + { + _lastSearchedForNewline = -1; + _newlineIndex += searchOffset; + if (_lineBuffer[_newlineIndex] is LF || // the newline is LF + _newlineIndex - _lineOffset + 1 < _lineLength || // we must have CR and we have whatever comes after it + _eof) // if we get here, we know we have a CR at the end of the buffer, so it's definitely the whole newline if we've hit EOF + { + // Process the line. + if (ProcessLine(out SseItem sseItem, out int advance)) + { + yield return sseItem; + } + + // Move past the line. + _lineOffset += advance; + _lineLength -= advance; + continue; + } + } + else + { + // Record the last position searched for a newline. The next time we search, + // we'll search from here rather than from _lineOffset, in order to avoid searching + // the same characters again. + _lastSearchedForNewline = _lineOffset + _lineLength; + } + + // We've processed everything in the buffer we currently can, so if we've already read EOF, we're done. + if (_eof) + { + // Spec: "Once the end of the file is reached, any pending data must be discarded. (If the file ends in the middle of an + // event, before the final empty line, the incomplete event is not dispatched.)" + break; + } + + // Read more data into the buffer. + FillLineBuffer(); + } + } + finally + { + ArrayPool.Shared.Return(_lineBuffer); + if (_dataBuffer is not null) + { + ArrayPool.Shared.Return(_dataBuffer); + } + } + } + + /// Gets an asynchronous enumerable of the server-sent events from this parser. + /// The cancellation token to use to cancel the enumeration. + /// The parser has already been enumerated. Such an exception may propagate out of a call to . + /// The enumeration was canceled. Such an exception may propagate out of a call to . + public async IAsyncEnumerable> EnumerateAsync([EnumeratorCancellation] CancellationToken cancellationToken = default) + { + // Validate that the parser is only used for one enumeration. + ThrowIfNotFirstEnumeration(); + + // Rent a line buffer. This will grow as needed. The line buffer is what's passed to the stream, + // so we want it to be large enough to reduce the number of reads we need to do when data is + // arriving quickly. (In debug, we use a smaller buffer to stress the growth and shifting logic.) + _lineBuffer = ArrayPool.Shared.Rent(DefaultArrayPoolRentSize); + try + { + // Spec: "Event streams in this format must always be encoded as UTF-8". + // Skip a UTF8 BOM if it exists at the beginning of the stream. (The BOM is defined as optional in the SSE grammar.) + while (await FillLineBufferAsync(cancellationToken).ConfigureAwait(false) != 0 && _lineLength < Utf8Bom.Length) ; + SkipBomIfPresent(); + + // Process all events in the stream. + while (true) + { + // See if there's a complete line in data already read from the stream. Lines are permitted to + // end with CR, LF, or CRLF. Look for all of them and if we find one, process the line. However, + // if we only find a CR and it's at the end of the read data, don't process it now, as we want + // to process it together with an LF that might immediately follow, rather than treating them + // as two separate characters, in which case we'd incorrectly process the CR as a line by itself. + GetNextSearchOffsetAndLength(out int searchOffset, out int searchLength); + _newlineIndex = _lineBuffer.AsSpan(searchOffset, searchLength).IndexOfAny(CR, LF); + if (_newlineIndex >= 0) + { + _lastSearchedForNewline = -1; + _newlineIndex += searchOffset; + if (_lineBuffer[_newlineIndex] is LF || // newline is LF + _newlineIndex - _lineOffset + 1 < _lineLength || // newline is CR, and we have whatever comes after it + _eof) // if we get here, we know we have a CR at the end of the buffer, so it's definitely the whole newline if we've hit EOF + { + // Process the line. + if (ProcessLine(out SseItem sseItem, out int advance)) + { + yield return sseItem; + } + + // Move past the line. + _lineOffset += advance; + _lineLength -= advance; + continue; + } + } + else + { + // Record the last position searched for a newline. The next time we search, + // we'll search from here rather than from _lineOffset, in order to avoid searching + // the same characters again. + _lastSearchedForNewline = searchOffset + searchLength; + } + + // We've processed everything in the buffer we currently can, so if we've already read EOF, we're done. + if (_eof) + { + // Spec: "Once the end of the file is reached, any pending data must be discarded. (If the file ends in the middle of an + // event, before the final empty line, the incomplete event is not dispatched.)" + break; + } + + // Read more data into the buffer. + await FillLineBufferAsync(cancellationToken).ConfigureAwait(false); + } + } + finally + { + ArrayPool.Shared.Return(_lineBuffer); + if (_dataBuffer is not null) + { + ArrayPool.Shared.Return(_dataBuffer); + } + } + } + + /// Gets the next index and length with which to perform a newline search. + private void GetNextSearchOffsetAndLength(out int searchOffset, out int searchLength) + { + if (_lastSearchedForNewline > _lineOffset) + { + searchOffset = _lastSearchedForNewline; + searchLength = _lineLength - (_lastSearchedForNewline - _lineOffset); + } + else + { + searchOffset = _lineOffset; + searchLength = _lineLength; + } + + Debug.Assert(searchOffset >= _lineOffset, $"{searchOffset}, {_lineLength}"); + Debug.Assert(searchOffset <= _lineOffset + _lineLength, $"{searchOffset}, {_lineOffset}, {_lineLength}"); + Debug.Assert(searchOffset <= _lineBuffer.Length, $"{searchOffset}, {_lineBuffer.Length}"); + + Debug.Assert(searchLength >= 0, $"{searchLength}"); + Debug.Assert(searchLength <= _lineLength, $"{searchLength}, {_lineLength}"); + } + + private int GetNewLineLength() + { + Debug.Assert(_newlineIndex - _lineOffset < _lineLength, "Expected to be positioned at a non-empty newline"); + return _lineBuffer.AsSpan(_newlineIndex, _lineLength - (_newlineIndex - _lineOffset)).StartsWith(CRLF) ? 2 : 1; + } + + /// + /// If there's no room remaining in the line buffer, either shifts the contents + /// left or grows the buffer in order to make room for the next read. + /// + private void ShiftOrGrowLineBufferIfNecessary() + { + // If data we've read is butting up against the end of the buffer and + // it's not taking up the entire buffer, slide what's there down to + // the beginning, making room to read more data into the buffer (since + // there's no newline in the data that's there). Otherwise, if the whole + // buffer is full, grow the buffer to accommodate more data, since, again, + // what's there doesn't contain a newline and thus a line is longer than + // the current buffer accommodates. + if (_lineOffset + _lineLength == _lineBuffer.Length) + { + if (_lineOffset != 0) + { + _lineBuffer.AsSpan(_lineOffset, _lineLength).CopyTo(_lineBuffer); + if (_lastSearchedForNewline >= 0) + { + _lastSearchedForNewline -= _lineOffset; + } + _lineOffset = 0; + } + else if (_lineLength == _lineBuffer.Length) + { + GrowBuffer(ref _lineBuffer!, _lineBuffer.Length * 2); + } + } + } + + /// Processes a complete line from the SSE stream. + /// The parsed item if the method returns true. + /// How many characters to advance in the line buffer. + /// true if an SSE item was successfully parsed; otherwise, false. + private bool ProcessLine(out SseItem sseItem, out int advance) + { + ReadOnlySpan line = _lineBuffer.AsSpan(_lineOffset, _newlineIndex - _lineOffset); + + // Spec: "If the line is empty (a blank line) Dispatch the event" + if (line.IsEmpty) + { + advance = GetNewLineLength(); + + if (_dataAppended) + { + sseItem = new SseItem(_itemParser(_eventType, _dataBuffer.AsSpan(0, _dataLength)), _eventType); + _eventType = SseParser.EventTypeDefault; + _dataLength = 0; + _dataAppended = false; + return true; + } + + sseItem = default; + return false; + } + + // Find the colon separating the field name and value. + int colonPos = line.IndexOf((byte)':'); + ReadOnlySpan fieldName; + ReadOnlySpan fieldValue; + if (colonPos >= 0) + { + // Spec: "Collect the characters on the line before the first U+003A COLON character (:), and let field be that string." + fieldName = line.Slice(0, colonPos); + + // Spec: "Collect the characters on the line after the first U+003A COLON character (:), and let value be that string. + // If value starts with a U+0020 SPACE character, remove it from value." + fieldValue = line.Slice(colonPos + 1); + if (!fieldValue.IsEmpty && fieldValue[0] == (byte)' ') + { + fieldValue = fieldValue.Slice(1); + } + } + else + { + // Spec: "using the whole line as the field name, and the empty string as the field value." + fieldName = line; + fieldValue = []; + } + + if (fieldName.SequenceEqual("data"u8)) + { + // Spec: "Append the field value to the data buffer, then append a single U+000A LINE FEED (LF) character to the data buffer." + // Spec: "If the data buffer's last character is a U+000A LINE FEED (LF) character, then remove the last character from the data buffer." + + // If there's nothing currently in the data buffer and we can easily detect that this line is immediately followed by + // an empty line, we can optimize it to just handle the data directly from the line buffer, rather than first copying + // into the data buffer and dispatching from there. + if (!_dataAppended) + { + int newlineLength = GetNewLineLength(); + ReadOnlySpan remainder = _lineBuffer.AsSpan(_newlineIndex + newlineLength, _lineLength - line.Length - newlineLength); + if (!remainder.IsEmpty && + (remainder[0] is LF || (remainder[0] is CR && remainder.Length > 1))) + { + advance = line.Length + newlineLength + (remainder.StartsWith(CRLF) ? 2 : 1); + sseItem = new SseItem(_itemParser(_eventType, fieldValue), _eventType); + _eventType = SseParser.EventTypeDefault; + return true; + } + } + + // We need to copy the data from the data buffer to the line buffer. Make sure there's enough room. + if (_dataBuffer is null || _dataLength + _lineLength + 1 > _dataBuffer.Length) + { + GrowBuffer(ref _dataBuffer, _dataLength + _lineLength + 1); + } + + // Append a newline if there's already content in the buffer. + // Then copy the field value to the data buffer + if (_dataAppended) + { + _dataBuffer![_dataLength++] = LF; + } + fieldValue.CopyTo(_dataBuffer.AsSpan(_dataLength)); + _dataLength += fieldValue.Length; + _dataAppended = true; + } + else if (fieldName.SequenceEqual("event"u8)) + { + // Spec: "Set the event type buffer to field value." + _eventType = SseParser.Utf8GetString(fieldValue); + } + else if (fieldName.SequenceEqual("id"u8)) + { + // Spec: "If the field value does not contain U+0000 NULL, then set the last event ID buffer to the field value. Otherwise, ignore the field." + if (fieldValue.IndexOf((byte)'\0') < 0) + { + // Note that fieldValue might be empty, in which case LastEventId will naturally be reset to the empty string. This is per spec. + LastEventId = SseParser.Utf8GetString(fieldValue); + } + } + else if (fieldName.SequenceEqual("retry"u8)) + { + // Spec: "If the field value consists of only ASCII digits, then interpret the field value as an integer in base ten, + // and set the event stream's reconnection time to that integer. Otherwise, ignore the field." + if (long.TryParse( +#if NET7_0_OR_GREATER + fieldValue, +#else + SseParser.Utf8GetString(fieldValue), +#endif + NumberStyles.None, CultureInfo.InvariantCulture, out long milliseconds)) + { + ReconnectionInterval = TimeSpan.FromMilliseconds(milliseconds); + } + } + else + { + // We'll end up here if the line starts with a colon, producing an empty field name, or if the field name is otherwise unrecognized. + // Spec: "If the line starts with a U+003A COLON character (:) Ignore the line." + // Spec: "Otherwise, The field is ignored" + } + + advance = line.Length + GetNewLineLength(); + sseItem = default; + return false; + } + + /// Gets the last event ID. + /// This value is updated any time a new last event ID is parsed. It is not reset between SSE items. + public string LastEventId { get; private set; } = string.Empty; // Spec: "must be initialized to the empty string" + + /// Gets the reconnection interval. + /// + /// If no retry event was received, this defaults to , and it will only + /// ever be in that situation. If a client wishes to retry, the server-sent + /// events specification states that the interval may then be decided by the client implementation and should be a + /// few seconds. + /// + public TimeSpan ReconnectionInterval { get; private set; } = Timeout.InfiniteTimeSpan; + + /// Transitions the object to a used state, throwing if it's already been used. + private void ThrowIfNotFirstEnumeration() + { + if (Interlocked.Exchange(ref _used, 1) != 0) + { + throw new InvalidOperationException("The enumerable may be enumerated only once."); + } + } + + /// Reads data from the stream into the line buffer. + private int FillLineBuffer() + { + ShiftOrGrowLineBufferIfNecessary(); + + int offset = _lineOffset + _lineLength; + int bytesRead = _stream.Read( +#if NET + _lineBuffer.AsSpan(offset)); +#else + _lineBuffer, offset, _lineBuffer.Length - offset); +#endif + + if (bytesRead > 0) + { + _lineLength += bytesRead; + } + else + { + _eof = true; + bytesRead = 0; + } + + return bytesRead; + } + + /// Reads data asynchronously from the stream into the line buffer. + private async ValueTask FillLineBufferAsync(CancellationToken cancellationToken) + { + ShiftOrGrowLineBufferIfNecessary(); + + int offset = _lineOffset + _lineLength; + int bytesRead = await +#if NET + _stream.ReadAsync(_lineBuffer.AsMemory(offset), cancellationToken) +#else + new ValueTask(_stream.ReadAsync(_lineBuffer, offset, _lineBuffer.Length - offset, cancellationToken)) +#endif + .ConfigureAwait(false); + + if (bytesRead > 0) + { + _lineLength += bytesRead; + } + else + { + _eof = true; + bytesRead = 0; + } + + return bytesRead; + } + + /// Gets the UTF8 BOM. + private static ReadOnlySpan Utf8Bom => [0xEF, 0xBB, 0xBF]; + + /// Called at the beginning of processing to skip over an optional UTF8 byte order mark. + private void SkipBomIfPresent() + { + Debug.Assert(_lineOffset == 0, $"Expected _lineOffset == 0, got {_lineOffset}"); + + if (_lineBuffer.AsSpan(0, _lineLength).StartsWith(Utf8Bom)) + { + _lineOffset += 3; + _lineLength -= 3; + } + } + + /// Grows the buffer, returning the existing one to the ArrayPool and renting an ArrayPool replacement. + private static void GrowBuffer(ref byte[]? buffer, int minimumLength) + { + byte[]? toReturn = buffer; + buffer = ArrayPool.Shared.Rent(Math.Max(minimumLength, DefaultArrayPoolRentSize)); + if (toReturn is not null) + { + Array.Copy(toReturn, buffer, toReturn.Length); + ArrayPool.Shared.Return(toReturn); + } + } + } +} \ No newline at end of file diff --git a/tests/Utility/TestHelpers.cs b/tests/Utility/TestHelpers.cs index c9cc23969..6ff1237a9 100644 --- a/tests/Utility/TestHelpers.cs +++ b/tests/Utility/TestHelpers.cs @@ -5,6 +5,7 @@ using OpenAI.Chat; using OpenAI.Embeddings; using OpenAI.Files; +using OpenAI.FineTuning; using OpenAI.Images; using OpenAI.VectorStores; using System; @@ -22,6 +23,8 @@ internal static class TestHelpers public enum TestScenario { Assistants, + Audio_TTS, + Audio_Whisper, Batch, Chat, Embeddings, @@ -31,11 +34,8 @@ public enum TestScenario LegacyCompletions, Models, Moderations, - TextToSpeech, - TopLevel, - Transcription, VectorStores, - VisionChat, + TopLevel, } public static OpenAIClient GetTestTopLevelClient() => GetTestClient(TestScenario.TopLevel); @@ -48,15 +48,18 @@ public static T GetTestClient(TestScenario scenario, string overrideModel = n { #pragma warning disable OPENAI001 TestScenario.Assistants => new AssistantClient(options), - TestScenario.VectorStores => new VectorStoreClient(options), #pragma warning restore OPENAI001 - TestScenario.Embeddings => new EmbeddingClient(overrideModel ?? "text-embedding-3-small", options), + TestScenario.Audio_TTS => new AudioClient(overrideModel ?? "tts-1", options), + TestScenario.Audio_Whisper => new AudioClient(overrideModel ?? "whisper-1", options), TestScenario.Batch => new BatchClient(options), - TestScenario.Chat => new ChatClient(overrideModel ?? "gpt-3.5-turbo", options), + TestScenario.Chat => new ChatClient(overrideModel ?? "gpt-4o-mini", options), + TestScenario.Embeddings => new EmbeddingClient(overrideModel ?? "text-embedding-3-small", options), TestScenario.Files => new FileClient(options), + TestScenario.FineTuning => new FineTuningClient(options), TestScenario.Images => new ImageClient(overrideModel ?? "dall-e-3", options), - TestScenario.Transcription => new AudioClient(overrideModel ?? "whisper-1", options), - TestScenario.VisionChat => new ChatClient(overrideModel ?? "gpt-4o", options), +#pragma warning disable OPENAI001 + TestScenario.VectorStores => new VectorStoreClient(options), +#pragma warning restore OPENAI001 TestScenario.TopLevel => new OpenAIClient(options), _ => throw new NotImplementedException(), };