Trace

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using var api = new LangSmithApi("API_KEY");
using var openAiApi = new OpenAiApi("API_KEY");

api.JsonSerializerContext = new SpecialJsonSerializerContext(OpenAI.SourceGenerationContext.Default);

// This can be a user input to your app
var question = "Can you summarize this morning's meetings?";

// This can be retrieved in a retrieval step
const string context = "During this morning's meeting, we solved all world conflict.";
var messages = new[]
{
    "You are a helpful assistant. Please respond to the user's request only based on the given context."
        .AsSystemMessage(),
    $"Question: {question}\\nContext: {context}",
};

// Create parent run
var parentRunId = Guid.NewGuid();
await api.Run.CreateRunAsync(
    name: "Chat Pipeline",
    runType: CreateRunRequestRunType.Chain,
    id: parentRunId,
    inputs: new Dictionary<string, object>
    {
        ["question"] = question,
    });

// Create child run
var childRunId = Guid.NewGuid();
await api.Run.CreateRunAsync(
    name: "OpenAI Call",
    runType: CreateRunRequestRunType.Llm,
    id: childRunId,
    parentRunId: parentRunId,
    inputs: new Dictionary<string, object>
    {
        ["messages"] = messages,
    });

// Generate a completion
var chatCompletion = await openAiApi.Chat.CreateChatCompletionAsync(
    model: CreateChatCompletionRequestModel.Gpt35Turbo,
    messages: messages);

// End runs
await api.Run.UpdateRunAsync(
    runId: childRunId,
    outputs: new Dictionary<string, object>
    {
        ["chatCompletion"] = chatCompletion,
    },
    endTime: DateTime.UtcNow.ToString("O"));
await api.Run.UpdateRunAsync(
    runId: parentRunId,
    outputs: new Dictionary<string, object>
    {
        ["answer"] = chatCompletion.Choices[0].Message.Content ?? string.Empty,
    },
    endTime: DateTime.UtcNow.ToString("O"));