2024-01-09 21:34:47 -07:00
package lib
import (
"bytes"
"context"
2024-01-10 00:28:31 -07:00
"errors"
2024-01-09 21:34:47 -07:00
"fmt"
"io"
"net/http"
"os"
"github.com/joho/godotenv"
"github.com/sashabaranov/go-openai"
)
var client * openai . Client
func init ( ) {
godotenv . Load ( ".env" )
apiKey := os . Getenv ( "OPENAI_API_KEY" )
if apiKey == "" {
fmt . Println ( "OPENAI_API_KEY environment variable not set" )
os . Exit ( 1 )
}
client = openai . NewClient ( apiKey )
}
func OpenAITextGeneration ( prompt string ) ( string , error ) {
resp , err := client . CreateChatCompletion (
context . Background ( ) ,
openai . ChatCompletionRequest {
Model : openai . GPT4TurboPreview ,
Messages : [ ] openai . ChatCompletionMessage {
{
Role : openai . ChatMessageRoleUser ,
Content : prompt ,
} ,
} ,
} ,
)
if err != nil {
fmt . Printf ( "ChatCompletion error: %v\n" , err )
return "" , err
}
return resp . Choices [ 0 ] . Message . Content , nil
}
2024-01-10 00:28:31 -07:00
func OpenAIImageGeneration ( prompt string ) ( imageFile * bytes . Buffer , err error ) {
2024-01-09 21:34:47 -07:00
resp , err := client . CreateImage ( context . Background ( ) , openai . ImageRequest {
Prompt : prompt ,
Model : "dall-e-3" ,
Size : "1024x1024" ,
} )
2024-01-10 00:28:31 -07:00
2024-01-09 21:34:47 -07:00
if err != nil {
2024-01-10 00:28:31 -07:00
return nil , errors . New ( "there was an error generating the image based on this prompt... this usually happens when the generated image violates safety requirements" )
2024-01-09 21:34:47 -07:00
}
imageRes , err := http . Get ( resp . Data [ 0 ] . URL )
if err != nil {
return nil , err
}
defer imageRes . Body . Close ( )
imageBytes , err := io . ReadAll ( imageRes . Body )
if err != nil {
return nil , err
}
2024-01-10 00:28:31 -07:00
return bytes . NewBuffer ( imageBytes ) , nil
2024-01-09 21:34:47 -07:00
}