оптимизации

This commit is contained in:
PC1\PTyTb
2025-08-17 00:39:58 +03:00
parent 8357a587df
commit d7bf17daa2
7 changed files with 260 additions and 229 deletions
+24 -11
View File
@@ -50,9 +50,7 @@ begin
FClient := THTTPClient.Create;
FBaseURL := 'https://api-key.fusionbrain.ai/';
FApiKey :=aKey;
// FApiKey := '28C9C30489D635732FB04AA6B85F0671';
FSecretKey := aSecret;
// FSecretKey := '805CB624C052202A05E3F40C0582045A';
end;
destructor TFusionBrainAPI.Destroy;
@@ -62,8 +60,10 @@ begin
end;
procedure TFusionBrainAPI.StartGeneration(const APrompt: string);
var
Task: ITask;
begin
TTask.Run(procedure
Task :=TTask.Run(procedure
var
PipelineID, UUID, FileName: string;
Links: TArray<string>;
@@ -94,6 +94,7 @@ begin
SetLength(Result, 2);
Result[0] := TNetHeader.Create('X-Key', 'Key ' + FApiKey);
Result[1] := TNetHeader.Create('X-Secret', 'Secret ' + FSecretKey);
end;
function TFusionBrainAPI.GetPipeline: string;
@@ -117,11 +118,11 @@ var
Response: IHTTPResponse;
Json: TJSONObject;
begin
// Óïðîùåííîå ñîçäàíèå JSON
Params := TJSONObject.Create;
Root := TJSONObject.Create;
try
Params := TJSONObject.Create;
Params.AddPair('query', Prompt);
Root.AddPair('type', 'GENERATE');
Root.AddPair('numImages', TJSONNumber.Create(1));
Root.AddPair('width', TJSONNumber.Create(512));
@@ -145,22 +146,31 @@ begin
end;
finally
Root.Free;
// Params îñâîáîæäàåòñÿ àâòîìàòè÷åñêè ÷åðåç Root
end;
end;
function TFusionBrainAPI.CheckGeneration(const RequestId: string): TArray<string>;
const
MaxAttempts = 60;
var
Response: IHTTPResponse;
Json, ResultObj: TJSONObject;
Files: TJSONArray;
i: Integer;
i, Attempt: Integer;
Status: string;
begin
repeat
Attempt := 0;
while Attempt < MaxAttempts do
begin
Sleep(5000);
Inc(Attempt);
Response := FClient.Get(FBaseURL + 'key/api/v1/pipeline/status/' + RequestId, nil, GetAuthHeaders);
Json := TJSONObject.ParseJSONValue(Response.ContentAsString) as TJSONObject;
try
if Json.GetValue<string>('status') = 'DONE' then
Status := Json.GetValue<string>('status');
if Status = 'DONE' then
begin
ResultObj := Json.GetValue<TJSONObject>('result');
Files := ResultObj.GetValue<TJSONArray>('files');
@@ -168,11 +178,14 @@ begin
for i := 0 to Files.Count - 1 do
Result[i] := Files.Items[i].Value;
Exit;
end;
end
else if Status = 'FAILED' then
raise Exception.Create('Generation failed');
finally
Json.Free;
end;
until False;
end;
raise Exception.Create('Timeout waiting for generation');
end;
procedure TFusionBrainAPI.SaveBase64Image(const Base64Str, FileName: string);
@@ -181,7 +194,7 @@ var
InputStr: TStringStream;
begin
DecodedStream := TMemoryStream.Create;
InputStr := TStringStream.Create(Base64Str);
InputStr := TStringStream.Create(Base64Str, TEncoding.ASCII);
try
TNetEncoding.Base64.Decode(InputStr, DecodedStream);
DecodedStream.SaveToFile(FileName);