| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453 |
- package controller
- import (
- "github.com/gin-gonic/gin"
- "github.com/labring/aiproxy/core/middleware"
- "github.com/labring/aiproxy/core/relay/mode"
- // relay model used by swagger
- _ "github.com/labring/aiproxy/core/relay/model"
- )
- // Completions godoc
- //
- // @Summary Completions
- // @Description Completions
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param request body model.GeneralOpenAIRequest true "Request"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.TextResponse
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/completions [post]
- func Completions() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.Completions),
- NewRelay(mode.Completions),
- }
- }
- // Anthropic godoc
- //
- // @Summary Anthropic
- // @Description Anthropic
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param request body model.AnthropicMessageRequest true "Request"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.TextResponse
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/messages [post]
- func Anthropic() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.Anthropic),
- NewRelay(mode.Anthropic),
- }
- }
- // ChatCompletions godoc
- //
- // @Summary ChatCompletions
- // @Description ChatCompletions
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param request body model.GeneralOpenAIRequest true "Request"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.TextResponse | model.ChatCompletionsStreamResponse
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/chat/completions [post]
- func ChatCompletions() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.ChatCompletions),
- NewRelay(mode.ChatCompletions),
- }
- }
- // Embeddings godoc
- //
- // @Summary Embeddings
- // @Description Embeddings
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param request body model.EmbeddingRequest true "Request"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.EmbeddingResponse
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/embeddings [post]
- func Embeddings() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.Embeddings),
- NewRelay(mode.Embeddings),
- }
- }
- // ImagesEdits godoc
- //
- // @Summary ImagesEdits
- // @Description ImagesEdits
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param prompt formData string true "Prompt"
- // @Param model formData string true "Model"
- // @Param image formData file true "Images"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.SttJSONResponse
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/images/edits [post]
- func ImagesEdits() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.ImagesEdits),
- NewRelay(mode.ImagesEdits),
- }
- }
- // ImagesGenerations godoc
- //
- // @Summary ImagesGenerations
- // @Description ImagesGenerations
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param request body model.ImageRequest true "Request"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.ImageResponse
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/images/generations [post]
- func ImagesGenerations() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.ImagesGenerations),
- NewRelay(mode.ImagesGenerations),
- }
- }
- // AudioSpeech godoc
- //
- // @Summary AudioSpeech
- // @Description AudioSpeech
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param request body model.TextToSpeechRequest true "Request"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {file} file "audio binary"
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/audio/speech [post]
- func AudioSpeech() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.AudioSpeech),
- NewRelay(mode.AudioSpeech),
- }
- }
- // AudioTranscription godoc
- //
- // @Summary AudioTranscription
- // @Description AudioTranscription
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param model formData string true "Model"
- // @Param file formData file true "File"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.SttJSONResponse
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/audio/transcriptions [post]
- func AudioTranscription() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.AudioTranscription),
- NewRelay(mode.AudioTranscription),
- }
- }
- // AudioTranslation godoc
- //
- // @Summary AudioTranslation
- // @Description AudioTranslation
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param model formData string true "Model"
- // @Param file formData file true "File"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.SttJSONResponse
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/audio/translations [post]
- func AudioTranslation() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.AudioTranslation),
- NewRelay(mode.AudioTranslation),
- }
- }
- func Moderations() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.Moderations),
- NewRelay(mode.Moderations),
- }
- }
- // Rerank godoc
- //
- // @Summary Rerank
- // @Description Rerank
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param request body model.RerankRequest true "Request"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.RerankResponse
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/rerank [post]
- func Rerank() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.Rerank),
- NewRelay(mode.Rerank),
- }
- }
- // ParsePdf godoc
- //
- // @Summary ParsePdf
- // @Description ParsePdf
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param model formData string true "Model"
- // @Param file formData file true "File"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.ParsePdfResponse
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/parse/pdf [post]
- func ParsePdf() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.ParsePdf),
- NewRelay(mode.ParsePdf),
- }
- }
- // VideoGenerationsJobs godoc
- //
- // @Summary VideoGenerationsJobs
- // @Description VideoGenerationsJobs
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param request body model.VideoGenerationJobRequest true "Request"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.VideoGenerationJob
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/video/generations/jobs [post]
- func VideoGenerationsJobs() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.VideoGenerationsJobs),
- NewRelay(mode.VideoGenerationsJobs),
- }
- }
- // VideoGenerationsGetJobs godoc
- //
- // @Summary VideoGenerationsGetJobs
- // @Description VideoGenerationsGetJobs
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param request body model.VideoGenerationJobRequest true "Request"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.VideoGenerationJob
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/video/generations/jobs/{id} [get]
- func VideoGenerationsGetJobs() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.VideoGenerationsGetJobs),
- NewRelay(mode.VideoGenerationsGetJobs),
- }
- }
- // VideoGenerationsContent godoc
- //
- // @Summary VideoGenerationsContent
- // @Description VideoGenerationsContent
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param request body model.VideoGenerationJobRequest true "Request"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {file} file "video binary"
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/video/generations/{id}/content/video [get]
- func VideoGenerationsContent() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.VideoGenerationsContent),
- NewRelay(mode.VideoGenerationsContent),
- }
- }
- // CreateResponse godoc
- //
- // @Summary Create response
- // @Description Create a new response
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param request body model.CreateResponseRequest true "Request"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.Response
- // @Header all {integer} X-RateLimit-Limit-Requests "X-RateLimit-Limit-Requests"
- // @Header all {integer} X-RateLimit-Limit-Tokens "X-RateLimit-Limit-Tokens"
- // @Header all {integer} X-RateLimit-Remaining-Requests "X-RateLimit-Remaining-Requests"
- // @Header all {integer} X-RateLimit-Remaining-Tokens "X-RateLimit-Remaining-Tokens"
- // @Header all {string} X-RateLimit-Reset-Requests "X-RateLimit-Reset-Requests"
- // @Header all {string} X-RateLimit-Reset-Tokens "X-RateLimit-Reset-Tokens"
- // @Router /v1/responses [post]
- func CreateResponse() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.Responses),
- NewRelay(mode.Responses),
- }
- }
- // GetResponse godoc
- //
- // @Summary Get response
- // @Description Get a response by ID
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param response_id path string true "Response ID"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.Response
- // @Router /v1/responses/{response_id} [get]
- func GetResponse() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.ResponsesGet),
- NewRelay(mode.ResponsesGet),
- }
- }
- // DeleteResponse godoc
- //
- // @Summary Delete response
- // @Description Delete a response by ID
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param response_id path string true "Response ID"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 204
- // @Router /v1/responses/{response_id} [delete]
- func DeleteResponse() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.ResponsesDelete),
- NewRelay(mode.ResponsesDelete),
- }
- }
- // CancelResponse godoc
- //
- // @Summary Cancel response
- // @Description Cancel a response by ID
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param response_id path string true "Response ID"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.Response
- // @Router /v1/responses/{response_id}/cancel [post]
- func CancelResponse() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.ResponsesCancel),
- NewRelay(mode.ResponsesCancel),
- }
- }
- // GetResponseInputItems godoc
- //
- // @Summary Get response input items
- // @Description Get input items for a response
- // @Tags relay
- // @Produce json
- // @Security ApiKeyAuth
- // @Param response_id path string true "Response ID"
- // @Param Aiproxy-Channel header string false "Optional Aiproxy-Channel header"
- // @Success 200 {object} model.InputItemList
- // @Router /v1/responses/{response_id}/input_items [get]
- func GetResponseInputItems() []gin.HandlerFunc {
- return []gin.HandlerFunc{
- middleware.NewDistribute(mode.ResponsesInputItems),
- NewRelay(mode.ResponsesInputItems),
- }
- }
|