You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

ChatRequestSettingsConverter.cs 4.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text.Json;
  4. using System.Text.Json.Serialization;
  5. namespace LLamaSharp.SemanticKernel.ChatCompletion;
  6. /// <summary>
  7. /// JSON converter for <see cref="OpenAIRequestSettings"/>
  8. /// </summary>
  9. [Obsolete("Use LLamaSharpPromptExecutionSettingsConverter instead")]
  10. public class ChatRequestSettingsConverter : JsonConverter<ChatRequestSettings>
  11. {
  12. /// <inheritdoc/>
  13. public override ChatRequestSettings? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
  14. {
  15. var requestSettings = new ChatRequestSettings();
  16. while (reader.Read() && reader.TokenType != JsonTokenType.EndObject)
  17. {
  18. if (reader.TokenType == JsonTokenType.PropertyName)
  19. {
  20. string? propertyName = reader.GetString();
  21. if (propertyName is not null)
  22. {
  23. // normalise property name to uppercase
  24. propertyName = propertyName.ToUpperInvariant();
  25. }
  26. reader.Read();
  27. switch (propertyName)
  28. {
  29. case "MODELID":
  30. case "MODEL_ID":
  31. requestSettings.ModelId = reader.GetString();
  32. break;
  33. case "TEMPERATURE":
  34. requestSettings.Temperature = reader.GetDouble();
  35. break;
  36. case "TOPP":
  37. case "TOP_P":
  38. requestSettings.TopP = reader.GetDouble();
  39. break;
  40. case "FREQUENCYPENALTY":
  41. case "FREQUENCY_PENALTY":
  42. requestSettings.FrequencyPenalty = reader.GetDouble();
  43. break;
  44. case "PRESENCEPENALTY":
  45. case "PRESENCE_PENALTY":
  46. requestSettings.PresencePenalty = reader.GetDouble();
  47. break;
  48. case "MAXTOKENS":
  49. case "MAX_TOKENS":
  50. requestSettings.MaxTokens = reader.GetInt32();
  51. break;
  52. case "STOPSEQUENCES":
  53. case "STOP_SEQUENCES":
  54. requestSettings.StopSequences = JsonSerializer.Deserialize<IList<string>>(ref reader, options) ?? Array.Empty<string>();
  55. break;
  56. case "RESULTSPERPROMPT":
  57. case "RESULTS_PER_PROMPT":
  58. requestSettings.ResultsPerPrompt = reader.GetInt32();
  59. break;
  60. case "TOKENSELECTIONBIASES":
  61. case "TOKEN_SELECTION_BIASES":
  62. requestSettings.TokenSelectionBiases = JsonSerializer.Deserialize<IDictionary<int, int>>(ref reader, options) ?? new Dictionary<int, int>();
  63. break;
  64. default:
  65. reader.Skip();
  66. break;
  67. }
  68. }
  69. }
  70. return requestSettings;
  71. }
  72. /// <inheritdoc/>
  73. public override void Write(Utf8JsonWriter writer, ChatRequestSettings value, JsonSerializerOptions options)
  74. {
  75. writer.WriteStartObject();
  76. writer.WriteNumber("temperature", value.Temperature);
  77. writer.WriteNumber("top_p", value.TopP);
  78. writer.WriteNumber("frequency_penalty", value.FrequencyPenalty);
  79. writer.WriteNumber("presence_penalty", value.PresencePenalty);
  80. if (value.MaxTokens is null)
  81. {
  82. writer.WriteNull("max_tokens");
  83. }
  84. else
  85. {
  86. writer.WriteNumber("max_tokens", (decimal)value.MaxTokens);
  87. }
  88. writer.WritePropertyName("stop_sequences");
  89. JsonSerializer.Serialize(writer, value.StopSequences, options);
  90. writer.WriteNumber("results_per_prompt", value.ResultsPerPrompt);
  91. writer.WritePropertyName("token_selection_biases");
  92. JsonSerializer.Serialize(writer, value.TokenSelectionBiases, options);
  93. writer.WriteEndObject();
  94. }
  95. }