39 lines
1.6 KiB
C#
39 lines
1.6 KiB
C#
|
|
using System;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using System.Text.Json;
|
||
|
|
using ModelContextProtocol;
|
||
|
|
using ModelContextProtocol.Protocol;
|
||
|
|
|
||
|
|
namespace Sozsoft.Mcp.Tools;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// Servis sonucunu arac sonucuna cevirir. Deger SDK'nin donus degerini yazdigi bicimde
|
||
|
|
/// (<see cref="McpJsonUtilities.DefaultOptions"/>) JSON metnidir. <see cref="McpProblem"/> hata
|
||
|
|
/// sonucudur (<c>IsError</c>): istisna atilmadan modele ulasir, model nedeni okuyup girdiyi duzeltir.
|
||
|
|
/// </summary>
|
||
|
|
internal static class McpToolResult
|
||
|
|
{
|
||
|
|
/// <summary>Degeri olmayan araclarin (not ekleme, silme) basari cevabi.</summary>
|
||
|
|
private const string Done = "ok";
|
||
|
|
|
||
|
|
public static CallToolResult From<T>(McpOutcome<T> outcome)
|
||
|
|
=> outcome.TryGetValue(out var value, out var problem)
|
||
|
|
? Text(JsonSerializer.Serialize(value, McpJsonUtilities.DefaultOptions))
|
||
|
|
: Error(problem.Message);
|
||
|
|
|
||
|
|
public static CallToolResult From(McpProblem? problem)
|
||
|
|
=> problem is null ? Text(Done) : Error(problem.Message);
|
||
|
|
|
||
|
|
/// <summary>Degeri metin disinda icerik (resim) tasiyan araclar icin.</summary>
|
||
|
|
public static CallToolResult From<T>(McpOutcome<T> outcome, Func<T, IList<ContentBlock>> toContent)
|
||
|
|
=> outcome.TryGetValue(out var value, out var problem)
|
||
|
|
? new CallToolResult { Content = toContent(value) }
|
||
|
|
: Error(problem.Message);
|
||
|
|
|
||
|
|
public static CallToolResult Error(string message)
|
||
|
|
=> new() { IsError = true, Content = [new TextContentBlock { Text = message }] };
|
||
|
|
|
||
|
|
private static CallToolResult Text(string text)
|
||
|
|
=> new() { Content = [new TextContentBlock { Text = text }] };
|
||
|
|
}
|