103 lines
4.0 KiB
C++
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
|