Repository navigation
Expand file tree
/
Copy pathDeepseek.Functions.Example.pas
More file actions
144 lines (122 loc) · 3.76 KB
/
Copy pathDeepseek.Functions.Example.pas
File metadata and controls
144 lines (122 loc) · 3.76 KB
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
unit Deepseek.Functions.Example;
{-------------------------------------------------------------------------------
Github repository : https://github.com/MaxiDonkey/DelphiDeepseek
Visit the Github repository for the documentation and use examples
------------------------------------------------------------------------------}
interface
uses
System.SysUtils, Deepseek.Functions.Core, Deepseek.Schema;
type
TWeatherReportFunction = class(TFunctionCore)
protected
function GetDescription: string; override;
function GetName: string; override;
function GetParameters: string; override;
public
function Execute(const Arguments: string): string; override;
class function CreateInstance: IFunctionCore;
end;
implementation
uses
System.StrUtils, System.JSON;
{ TWeatherReportFunction }
class function TWeatherReportFunction.CreateInstance: IFunctionCore;
begin
Result := TWeatherReportFunction.create;
end;
function TWeatherReportFunction.Execute(const Arguments: string): string;
procedure AddToReport(const Value: TJSONObject;
Temperature: Integer; Forecast: TArray<string>);
begin
Value.AddPair('temperature', TJSONNumber.Create(Temperature));
Value.AddPair('forecast', TJSONArray.Create(Forecast[0], Forecast[1]));
end;
begin
Result := EmptyStr;
var Location := EmptyStr;
var UnitType := EmptyStr;
{--- Parse arguments to retrieve parameters }
var JSON := TJSONObject.ParseJSONValue(Arguments) as TJSONObject;
try
if Assigned(JSON) then
try
Location := JSON.GetValue('location', '');
UnitType := JSON.GetValue('unit', '');
finally
JSON.Free;
end;
except
Location := EmptyStr;
end;
{--- Stop the treatment if location is empty }
if Location.IsEmpty then
Exit;
{--- Build the response }
JSON := TJSONObject.Create;
try
JSON.AddPair('location', Location);
JSON.AddPair('unit', UnitType);
case IndexStr(AnsiLowerCase(Location), [
'paris', 'paris, 75',
'marseille', 'marseille, 13']) of
0,1 :
AddToReport(JSON, 14, ['rainy', 'low visibility']);
2,3 :
AddToReport(JSON, 29, ['sunny', 'windy']);
end;
Result := JSON.ToJSON;
finally
JSON.Free;
end;
end; {Execute}
function TWeatherReportFunction.GetDescription: string;
begin
Result := 'Get the current weather in a given location.';
end;
function TWeatherReportFunction.GetName: string;
begin
Result := 'get_weather';
end;
function TWeatherReportFunction.GetParameters: string;
begin
// Result :=
// '{'+
// '"type": "object",'+
// '"properties": {'+
// '"location": {'+
// '"type": "string",'+
// '"description": "The city and department, e.g. Marseille, 13"'+
// '},'+
// '"unit": {'+
// '"type": "string",'+
// '"enum": ["celsius", "fahrenheit"]'+
// '}'+
// '},'+
// '"required": ["location"]'+
// '}';
{--- If we use the TSchemaParams class defined in the MistralAI.Schema.pas unit }
var Schema := TSchemaParams.New(
procedure (var Params: TSchemaParams)
begin
Params.&Type(stOBJECT);
Params.Properties('properties',
procedure (var Params: TSchemaParams)
begin
Params.Properties('location',
procedure (var Params: TSchemaParams)
begin
Params.&Type(stSTRING);
Params.Description('The city and state, e.g. San Francisco, CA');
end);
Params.Properties('unit',
procedure (var Params: TSchemaParams)
begin
Params.&Type(stSTRING);
Params.Enum(['celsius', 'fahrenheit']);
end);
end);
Params.Required(['location', 'unit']);
end);
Result := Schema.ToJsonString(True);
end;
end.