Skip to content

Instantly share code, notes, and snippets.

@jkone27
Last active September 16, 2024 16:52
Show Gist options
  • Save jkone27/ebfa9dffb4ecf843d55d35cb5cc6aa1b to your computer and use it in GitHub Desktop.
Save jkone27/ebfa9dffb4ecf843d55d35cb5cc6aa1b to your computer and use it in GitHub Desktop.
semantic kernel hugging chat completion engine sample
#r "nuget: Microsoft.Extensions.DependencyInjection"
#r "nuget: Microsoft.Extensions.Http"
#r "nuget: Microsoft.Extensions.Logging.Console"
#r "nuget: Microsoft.Extensions.Logging"
#r "nuget: Microsoft.SemanticKernel.Connectors.HuggingFace, 1.12.0-preview"
open Microsoft.SemanticKernel
open Microsoft.SemanticKernel.ChatCompletion
open Microsoft.Extensions.Logging
open System
open Microsoft.Extensions.DependencyInjection
open Microsoft.Extensions.Http.Logging
open System.Net.Http
open System.Net.Http.Json
open Microsoft.Extensions.Http
open System.Threading.Tasks
let builder =
let API_KEY = "YOUR_HUGGING_FACE_API_KEY_HERE"
let MODEL_ID = "microsoft/Phi-3-mini-4k-instruct"
let API_URL = $"https://api-inference.huggingface.co/"
let b = Kernel.CreateBuilder().AddHuggingFaceChatCompletion(
MODEL_ID,
API_URL |> Uri,
API_KEY)
b.Services
.AddLogging(fun b ->
b.AddFilter("System.Net.Http.HttpClient",
LogLevel.Debug) |> ignore
b.AddFilter("Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware",
LogLevel.Debug) |> ignore
b.AddConsole() |> ignore
b.SetMinimumLevel(LogLevel.Information) |> ignore
// b.Configure(fun c ->
// c.ActivityTrackingOptions <- ActivityTrackingOptions.Baggage
// )
|> ignore
)|> ignore
b
let kernel = builder.Build()
let chatCompletion =
kernel.GetRequiredService<IChatCompletionService>()
let chatHistory =
new ChatHistory("""
You are an expert in F#, dotnet, aspnet and .fsx and scripting with nuget!
always reply in this example format for conversations,
before replying verify the F# code is correct: remember F# is an ML language like ocaml,
but also make use of the pipe operator as much as possible.
question: `how do i declare a record in F#?`
---
answer:
```fsharp
type Car = { Brand: string }
```
try to keep answers as short and relevant as possible, if you do NOT know,
ASK for more details to the user and wait for the next input
""")
let mutable exit = false
while not exit do
printfn "I am an F# assistant, ask me anything!"
let question = System.Console.ReadLine()
chatHistory.Add(new ChatMessageContent(AuthorRole.Assistant, question))
let result =
task {
try
let! x = chatCompletion.GetChatMessageContentAsync(chatHistory)
return x
with ex ->
let inner = ex.InnerException :?> System.Net.Http.HttpRequestException
failwith inner.Message
return new ChatMessageContent()
}
|> Async.AwaitTask
|> Async.RunSynchronously
Console.WriteLine(result.Role)
Console.WriteLine(result.Content)
printfn "another round? y/n"
printfn "\r\n"
let reply = Console.ReadKey()
exit <- reply.KeyChar.ToString().ToLower() <> "y"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment