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.

LLamaSharpPromptExecutionSettingsConverter.cs 4.1 kB

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