Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
6b4e84c
Remove class `TextEmbeddingResponse`
N-E-W-T-O-N Jun 11, 2024
957f2a0
Fix bug #6635: Improve error handling in `GenerateEmbeddingsAsync`
N-E-W-T-O-N Jun 11, 2024
0618ec6
Keep only one Deserilzation class of type List<ReadOnlyMemory<float>>
N-E-W-T-O-N Jun 12, 2024
a79f63c
Made Changes as requested
N-E-W-T-O-N Jun 12, 2024
6fe4a03
Merge branch 'main' into fix_huggingFaceEmbedding
N-E-W-T-O-N Jun 12, 2024
4f9eb97
Added a Custom HttpClientHandler example
N-E-W-T-O-N Jun 15, 2024
0bd1ab4
Merge branch 'microsoft:main' into fix_huggingFaceEmbedding
N-E-W-T-O-N Jun 19, 2024
ad8cce7
Update and rename MemoryHuggingFaceEmbedding_CustomHttpResponse.cs to…
N-E-W-T-O-N Jun 19, 2024
3793eea
Update HuggingFaceClient.cs
N-E-W-T-O-N Jun 19, 2024
bc5e98f
Minor fix
N-E-W-T-O-N Jun 19, 2024
4641fe5
Remove trailing white-space
N-E-W-T-O-N Jun 20, 2024
f6c4abe
Update HuggingFace_TextEmbeddingCustomHttpHandle.cs
N-E-W-T-O-N Jun 23, 2024
aee5cd0
Update HuggingFace_TextEmbeddingCustomHttpHandle.cs
N-E-W-T-O-N Jun 23, 2024
a8cf0fc
Update HuggingFace_TextEmbeddingCustomHttpHandle.cs
N-E-W-T-O-N Jun 23, 2024
71ad50d
Update HuggingFaceClient.cs
N-E-W-T-O-N Jun 23, 2024
1694190
Resolved Encoding , Trail Whitespace & Other Issues
N-E-W-T-O-N Jun 23, 2024
2194756
Minor Fix
N-E-W-T-O-N Jun 23, 2024
50f4836
Resolve the bug
N-E-W-T-O-N Jun 23, 2024
273d1cf
Merge branch 'main' into fix_huggingFaceEmbedding
dmytrostruk Jun 24, 2024
feb1015
made the CustomHttpClientHandler as sealed
N-E-W-T-O-N Jun 25, 2024
b97955a
Update embeddings_test_response_feature_extraction.json
N-E-W-T-O-N Jun 27, 2024
faf9f87
Update HuggingFaceEmbeddingGenerationTests.cs
N-E-W-T-O-N Jun 27, 2024
90f697e
Update HuggingFaceEmbeddingGenerationTests.cs
N-E-W-T-O-N Jun 27, 2024
3e2a42c
Update HuggingFace_TextEmbeddingCustomHttpHandle.cs
N-E-W-T-O-N Jun 27, 2024
6048aa5
> Change in FACT ShouldHandleServiceResponseAsync()
N-E-W-T-O-N Jun 27, 2024
cd3aa67
Merge branch 'main' into fix_huggingFaceEmbedding
dmytrostruk Jun 27, 2024
31ea059
Small fixes
dmytrostruk Jul 1, 2024
07fc890
Merge branch 'fix_huggingFaceEmbedding' of https://github.com/N-E-W-T…
dmytrostruk Jul 1, 2024
8f8228e
Small fix
dmytrostruk Jul 1, 2024
a2f6be9
Merge branch 'main' into fix_huggingFaceEmbedding
dmytrostruk Jul 1, 2024
cef70c2
Remove line 40-43 as suggested by @westey-m
N-E-W-T-O-N Jul 3, 2024
e41f7f4
Make the Serialization & Deserilization process Asynchronous
N-E-W-T-O-N Jul 3, 2024
c772d2d
Merge branch 'main' into fix_huggingFaceEmbedding
dmytrostruk Jul 5, 2024
6cefe75
Resolved Issue CA1869 related JsonSerializerOptions
N-E-W-T-O-N Jul 6, 2024
6063e00
Merge branch 'main' into fix_huggingFaceEmbedding
dmytrostruk Jul 8, 2024
5191c92
Merge branch 'main' into fix_huggingFaceEmbedding
dmytrostruk Jul 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
// Copyright (c) Microsoft. All rights reserved.

using System.Text.Json;
using Microsoft.SemanticKernel.Connectors.HuggingFace;
using Microsoft.SemanticKernel.Connectors.Sqlite;
using Microsoft.SemanticKernel.Memory;

#pragma warning disable CS8602 // Dereference of a possibly null reference.

namespace Memory;

/// <summary>
/// This example shows how to use custom <see cref="HttpClientHandler"/> to override Hugging Face HTTP response.
/// Generally, an embedding model will return results as a 1 * n matrix for input type [string]. However, the model can have different matrix dimensionality.
/// For example, the <a href="https://huggingface.co/cointegrated/LaBSE-en-ru">cointegrated/LaBSE-en-ru</a> model returns results as a 1 * 1 * 4 * 768 matrix, which is different from Hugging Face embedding generation service implementation.
/// To address this, a custom <see cref="HttpClientHandler"/> can be used to modify the response before sending it back.
/// </summary>
public class HuggingFace_TextEmbeddingCustomHttpHandler(ITestOutputHelper output) : BaseTest(output)
{
public async Task RunInferenceApiEmbeddingCustomHttpHandlerAsync()
{
Console.WriteLine("\n======= Hugging Face Inference API - Embedding Example ========\n");

var hf = new HuggingFaceTextEmbeddingGenerationService(
"cointegrated/LaBSE-en-ru",
apiKey: TestConfiguration.HuggingFace.ApiKey,
httpClient: new HttpClient(new CustomHttpClientHandler()
{
CheckCertificateRevocationList = true
})
);

var sqliteMemory = await SqliteMemoryStore.ConnectAsync("./../../../Sqlite.sqlite");

var skMemory = new MemoryBuilder()
.WithTextEmbeddingGeneration(hf)
.WithMemoryStore(sqliteMemory)
.Build();

await skMemory.SaveInformationAsync("Test", "THIS IS A SAMPLE", "sample", "TEXT");
}

private sealed class CustomHttpClientHandler : HttpClientHandler
{
private readonly JsonSerializerOptions _jsonOptions = new();
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
// Log the request URI
//Console.WriteLine($"Request: {request.Method} {request.RequestUri}");

// Send the request and get the response
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);

// Log the response status code
//Console.WriteLine($"Response: {(int)response.StatusCode} {response.ReasonPhrase}");

// You can manipulate the response here
// For example, add a custom header
// response.Headers.Add("X-Custom-Header", "CustomValue");

// For example, modify the response content
Stream originalContent = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
List<List<List<ReadOnlyMemory<float>>>> modifiedContent = (await JsonSerializer.DeserializeAsync<List<List<List<ReadOnlyMemory<float>>>>>(originalContent, _jsonOptions, cancellationToken).ConfigureAwait(false))!;

Stream modifiedStream = new MemoryStream();
await JsonSerializer.SerializeAsync(modifiedStream, modifiedContent[0][0].ToList(), _jsonOptions, cancellationToken).ConfigureAwait(false);
response.Content = new StreamContent(modifiedStream);

// Return the modified response
return response;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,8 @@ public async Task ShouldHandleServiceResponseAsync()
//Assert

Assert.NotNull(embeddings);
Assert.Equal(3, embeddings.Count);
Assert.Equal(768, embeddings.First().Length);
Assert.Single(embeddings);
Assert.Equal(1024, embeddings.First().Length);
}

public void Dispose()
Expand Down
Loading