Categorygithub.com/stong1994/github-copilot-api
modulepackage
0.0.0-20241128162310-fa83a9d9fc9b
Repository: https://github.com/stong1994/github-copilot-api.git
Documentation: pkg.go.dev

# README

GitHub Copilot API

This repository provides an API for GitHub Copilot. The API includes features for completion, embedding, and device authentication.

Table of Contents

Completion

The completion feature allows you to generate code completions.

Example

package main

import (
	"context"
	"fmt"

	copilot "github.com/stong1994/github-copilot-api"
)

func main() {
	client, err := copilot.NewCopilot()
	if err != nil {
		panic(err)
	}
	response, err := client.CreateCompletion(context.Background(), &copilot.CompletionRequest{
		Messages: []copilot.Message{
			{
				Role:    "system",
				Content: "you are a great developer!",
			},
			{
				Role:    "user",
				Content: "give me a code to print hello world with golang",
			},
		},
		StreamingFunc: func(ctx context.Context, chunk []byte) error {
			fmt.Print(string(chunk))
			return nil
		},
	})
	if err != nil {
		panic(err)
	}
	// you can get the content directly
	// fmt.Println(response.Choices[0].Message.Content)
}

Running the Example

To run the example, use the following command:

go run main.go

Expected Output

The output will be similar to this:

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

This example demonstrates how to use the GitHub Copilot API to generate a simple "Hello, World!" program in Go.

Embedding

The embedding feature allows you to create embeddings for text.

Example

package main

import (
	"context"
	"fmt"

	copilot "github.com/stong1994/github-copilot-api"
)

func main() {
	client, err := copilot.NewCopilot()
	if err != nil {
		panic(err)
	}
	response, err := client.CreateEmbedding(context.Background(), &copilot.EmbeddingRequest{
		Model: "copilot-text-embedding-ada-002",
		Input: []string{
			"you are a great developer!",
			"thanks for your help",
		},
	})
	if err != nil {
		panic(err)
	}
	for i, embedding := range response.Data {
		fmt.Printf("%d: %v\n", i, embedding)
	}
}

Running the Example

go run main.go

Expected Output

0: {[-0.0026773715 -0.0018009724 0.010035048 ...]}
1: {[-0.0312465 -0.0329363 0.020233147 ...]}

Device Authentication

You can get the GitHub Copilot token with device authentication.

Example

package main

import (
	"context"
	"fmt"

	copilot "github.com/stong1994/github-copilot-api"
)

func main() {
	token, err := copilot.DeviceLogin(context.TODO(), "your GITHUB_CLIENT_ID")
	if err != nil {
		panic(err)
	}
	fmt.Printf("GITHUB_OAUTH_TOKEN is %s, you can set it into environment: export GITHUB_OATUH_TOKEN=%s", token, token)
}

To get the GITHUB_CLIENT_ID, you can follow this blog.

Running the Example

go run main.go

Expected output

Please take this code "B8F8-AF41" to authenticate at https://github.com/login/device.
Press 'y' to continue, or any other key to abort.
y # after enter 'y', you should goto the web page and paste the code above.
Authenticating, please wait...
GITHUB_OAUTH_TOKEN is xxxxx, you can set it into environment: export GITHUB_OAUTH_TOKEN=xxx

# Packages

No description provided by the author

# Functions

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Structs

CompletionRequest is a request to complete a completion.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
StreamedChatResponsePayload is a chunk from the stream.
No description provided by the author
No description provided by the author

# Interfaces

Doer performs a HTTP request.

# Type aliases

Option is an option for the Lingyi client.