Code Monkey home page Code Monkey logo

openaigo's Introduction

openaigo

Go CodeQL App Test over API License FOSSA Status
Maintainability Go Report Card codecov
Reference GoDoc

Yet another API client for api.openai.com.

This library is community-maintained, NOT officially supported by OpenAI.

Usage Example

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/otiai10/openaigo"
)

func main() {
	client := openaigo.NewClient(os.Getenv("OPENAI_API_KEY"))
	request := openaigo.ChatRequest{
		Model: "gpt-4o",
		Messages: []openaigo.Message{
			{Role: "user", Content: "Hello!"},
		},
	}
	ctx := context.Background()
	response, err := client.Chat(ctx, request)
	fmt.Println(response, err)
}

if you just want to try, hit commands below.

git clone https://github.com/otiai10/openaigo.git
cd openaigo
OPENAI_API_KEY=YourAPIKey go run ./testapp/main.go

See test app as a working example.

API Keys?

Visit https://beta.openai.com/account/api-keys and you can create your own API key to get started for free.

Endpoint Support

Need function_call?

request := openaigo.ChatRequest{
  Messages: []openaigo.Message{
    {Role: "user", Content: "How's the weather today in Tokyo?"},
  },
  Functions: []openaigo.Function{
    {
      Name: "get_weather",
      Parameters: openaigo.Parameters{
        Type:       "object",
        Properties: map[string]map[string]any{
          "location": {"type": "string"},
          "date":     {"type": "string", "description": "ISO 8601 date string"},
        },
        Required: []string{"location"},
      },
    }
  },
}

if you want shorthand, use functioncall.

import fc "github.com/otiai10/openaigo/functioncall"

request.Functions = fc.Funcs{
  "get_weather": {GetWeather, "Get weather of the location", fc.Params{
    {"location", "string", "location of the weather", true},
    {"date", "string", "ISO 8601 date string", true},
  }},
}

See test app as a working example.

Need stream?

client := openaigo.NewClient(OPENAI_API_KEY)
request := openaigo.ChatRequest{
  Stream: true,
  StreamCallback: func(res ChatCompletionResponse, done bool, err error) {
    // Do what you want!
    // You might need chan handling here.
    // See test app how you can do it.
    // https://github.com/otiai10/openaigo/search?q=chat_completion_stream
  },
}

Need Proxy?

client := openaigo.NewClient(OPENAI_API_KEY)
// You can set whatever you want
transport := &http.Transport{ Proxy: http.ProxyFromEnvironment }
client.HTTPClient = &http.Client{ Transport: transport }
// Done!

Issues

Report any issue here or any feedback is welcomed.

openaigo's People

Contributors

andreiregiani avatar doozers avatar henomis avatar naist4869 avatar otiai10 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

openaigo's Issues

Support for proxy options

As you know, openai does not provide service for some places, users in these places must use proxy to use openai's service, therefore, can you add proxy option inside the library? so that those who need to use proxy can also use the library?

Why are there so few response data?

Describe the bug

Hello, i just made a test ,it really works, thanks for your contribution!
but Why are there so few response data ?

my demo is look like this, Ask chatGPT questions: "Talk about the future development trend and write a report"

the response is :
[001] completion
{ID:cmpl-6hyt1VmcDZXMiALC1NPtwO6WOOd6R Object:text_completion Created:1675940171 Model:text-davinci-003 Choices:[{Text:

The world is ever-changing, and as technology redefines our lives Index:0 LogProbs:0 FinishReason:length}] Usage:{PromptTokens:10 CompletionTokens:16 TotalTokens:26}}

There are too few response data, What's wrong?

To Reproduce

cd openaigo
OPENAI_API_KEY=YourAPIKey go run ./testapp/main.go

Code snippets

var scenarios = []Scenario{
	{
		Name: "completion",
		Run: func() (any, error) {
			client := openaigo.NewClient(OPENAI_API_KEY)
			request := openaigo.CompletionRequestBody{
				Model:  "text-davinci-003",
				Prompt: []string{"Talk about the future development trend and write a report"},
			}
			return client.Completion(nil, request)
		},
	}
}


func main() {
	match := flag.Arg(0)
	total := 0
	var dur time.Duration = 0
	errors := []error{}
	for i, scenario := range scenarios {
		fmt.Printf("\033[1;34m[%03d] %s\033[0m\n", i+1, scenario.Name)
		if match != "" && !strings.Contains(scenario.Name, match) {
			fmt.Printf("====> Skip\n\n")
			continue
		}
		begin := time.Now()
		res, err := scenario.Run()
		elapsed := time.Since(begin)
		if err != nil {
			fmt.Printf("\033[31mError:\033[0m %v\nTime: ", err)
			errors = append(errors, err)
		} else {
			fmt.Printf("%+v\n\033[32mTime:\033[0m ", res)
		}
		fmt.Printf("%v\n\n", elapsed)
		dur += elapsed
		total++
	}
	fmt.Println("===============================================")
	fmt.Printf("Total %d scenario executed in %v.\n", total, dur)
	if len(errors) > 0 {
		os.Exit(1)
	}
}

OS

linux amd64

Go version

Go 1.20

Library version

your open-ai current version

chat history

Describe the bug

project that saves chat history to db
and then use history in context

To Reproduce

.

Code snippets

No response

OS

Windows

Go version

1.18

Library version

Latest

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.