Files
2025-04-07 18:31:41 -07:00

103 lines
4.0 KiB
C++

// OpenAI, Copyright LifeEXE. All Rights Reserved.
#pragma once
// https://platform.openai.com/docs/api-reference
namespace OpenAI
{
class IAPI
{
public:
virtual ~IAPI() = default;
virtual FString BaseURL() const = 0;
virtual FString Models() const = 0;
virtual FString Completion() const = 0;
virtual FString ChatCompletion() const = 0;
virtual FString ImageGenerations() const = 0;
virtual FString ImageEdits() const = 0;
virtual FString ImageVariations() const = 0;
virtual FString Embeddings() const = 0;
virtual FString Speech() const = 0;
virtual FString AudioTranscriptions() const = 0;
virtual FString AudioTranslations() const = 0;
virtual FString Files() const = 0;
virtual FString FineTuningJobs() const = 0;
virtual FString Moderations() const = 0;
};
namespace V1
{
class OpenAIAPI : public IAPI
{
public:
OpenAIAPI(const FString& BaseURL = "https://api.openai.com") : API_URL(BaseURL) {}
virtual FString BaseURL() const override { return API_URL; }
virtual FString Models() const override { return API_URL + "/v1/models"; }
virtual FString Completion() const override { return API_URL + "/v1/completions"; }
virtual FString ChatCompletion() const override { return API_URL + "/v1/chat/completions"; }
virtual FString ImageGenerations() const override { return API_URL + "/v1/images/generations"; }
virtual FString ImageEdits() const override { return API_URL + "/v1/images/edits"; }
virtual FString ImageVariations() const override { return API_URL + "/v1/images/variations"; }
virtual FString Embeddings() const override { return API_URL + "/v1/embeddings"; }
virtual FString Speech() const override { return API_URL + "/v1/audio/speech"; }
virtual FString AudioTranscriptions() const override { return API_URL + "/v1/audio/transcriptions"; }
virtual FString AudioTranslations() const override { return API_URL + "/v1/audio/translations"; }
virtual FString Files() const override { return API_URL + "/v1/files"; }
virtual FString FineTuningJobs() const override { return API_URL + "/v1/fine_tuning/jobs"; }
virtual FString Moderations() const override { return API_URL + "/v1/moderations"; }
private:
const FString API_URL;
};
//
struct FOpenAIEndpoints
{
FString Models;
FString Completions;
FString ChatCompletions;
FString ImageGenerations;
FString ImageEdits;
FString ImageVariations;
FString Embeddings;
FString Speech;
FString AudioTranscriptions;
FString AudioTranslations;
FString Files;
FString FineTuningJobs;
FString Moderations;
};
class GenericAPI : public OpenAI::IAPI
{
public:
GenericAPI(const FOpenAIEndpoints& Endpoints) : OpenAIEndpoints(Endpoints) {}
virtual FString Models() const override { return OpenAIEndpoints.Models; }
virtual FString Completion() const override { return OpenAIEndpoints.Completions; }
virtual FString ChatCompletion() const override { return OpenAIEndpoints.ChatCompletions; }
virtual FString ImageGenerations() const override { return OpenAIEndpoints.ImageGenerations; }
virtual FString ImageEdits() const override { return OpenAIEndpoints.ImageEdits; }
virtual FString ImageVariations() const override { return OpenAIEndpoints.ImageVariations; }
virtual FString Embeddings() const override { return OpenAIEndpoints.Embeddings; }
virtual FString Speech() const override { return OpenAIEndpoints.Speech; }
virtual FString AudioTranscriptions() const override { return OpenAIEndpoints.AudioTranscriptions; }
virtual FString AudioTranslations() const override { return OpenAIEndpoints.AudioTranslations; }
virtual FString Files() const override { return OpenAIEndpoints.Files; }
virtual FString FineTuningJobs() const override { return OpenAIEndpoints.FineTuningJobs; }
virtual FString Moderations() const override { return OpenAIEndpoints.Moderations; }
private:
const FOpenAIEndpoints OpenAIEndpoints;
const FString API_URL;
virtual FString BaseURL() const override { return {}; }
};
} // namespace V1
} // namespace OpenAI