Private
Public Access
1
0

Moved api.ChatCompletionProvider, api.Chunk to api/provider

This commit is contained in:
2024-09-30 16:14:11 +00:00
parent a441866f2f
commit 327a128b2f
12 changed files with 153 additions and 152 deletions

View File

@@ -11,6 +11,7 @@ import (
"strings"
"git.mlow.ca/mlow/lmcli/pkg/api"
"git.mlow.ca/mlow/lmcli/pkg/api/provider"
)
const ANTHROPIC_VERSION = "2023-06-01"
@@ -117,7 +118,7 @@ func convertTools(tools []api.ToolSpec) []Tool {
}
func createChatCompletionRequest(
params api.RequestParameters,
params provider.RequestParameters,
messages []api.Message,
) (string, ChatCompletionRequest) {
requestMessages := make([]ChatCompletionMessage, 0, len(messages))
@@ -188,7 +189,8 @@ func createChatCompletionRequest(
}
var prefill string
if api.IsAssistantContinuation(messages) {
if len(messages) > 0 && messages[len(messages)-1].Role == api.MessageRoleAssistant {
// Prompting on an assitant message, use its content as prefill
prefill = messages[len(messages)-1].Content
}
@@ -226,7 +228,7 @@ func (c *AnthropicClient) sendRequest(ctx context.Context, r ChatCompletionReque
func (c *AnthropicClient) CreateChatCompletion(
ctx context.Context,
params api.RequestParameters,
params provider.RequestParameters,
messages []api.Message,
) (*api.Message, error) {
if len(messages) == 0 {
@@ -253,9 +255,9 @@ func (c *AnthropicClient) CreateChatCompletion(
func (c *AnthropicClient) CreateChatCompletionStream(
ctx context.Context,
params api.RequestParameters,
params provider.RequestParameters,
messages []api.Message,
output chan<- api.Chunk,
output chan<- provider.Chunk,
) (*api.Message, error) {
if len(messages) == 0 {
return nil, fmt.Errorf("can't create completion from no messages")
@@ -349,7 +351,7 @@ func (c *AnthropicClient) CreateChatCompletionStream(
firstChunkReceived = true
}
block.Text += text
output <- api.Chunk{
output <- provider.Chunk{
Content: text,
TokenCount: 1,
}

View File

@@ -11,6 +11,7 @@ import (
"strings"
"git.mlow.ca/mlow/lmcli/pkg/api"
"git.mlow.ca/mlow/lmcli/pkg/api/provider"
)
type Client struct {
@@ -172,7 +173,7 @@ func convertToolResultsToGemini(toolResults []api.ToolResult) ([]FunctionRespons
}
func createGenerateContentRequest(
params api.RequestParameters,
params provider.RequestParameters,
messages []api.Message,
) (*GenerateContentRequest, error) {
requestContents := make([]Content, 0, len(messages))
@@ -279,7 +280,7 @@ func (c *Client) sendRequest(req *http.Request) (*http.Response, error) {
func (c *Client) CreateChatCompletion(
ctx context.Context,
params api.RequestParameters,
params provider.RequestParameters,
messages []api.Message,
) (*api.Message, error) {
if len(messages) == 0 {
@@ -351,9 +352,9 @@ func (c *Client) CreateChatCompletion(
func (c *Client) CreateChatCompletionStream(
ctx context.Context,
params api.RequestParameters,
params provider.RequestParameters,
messages []api.Message,
output chan<- api.Chunk,
output chan<- provider.Chunk,
) (*api.Message, error) {
if len(messages) == 0 {
return nil, fmt.Errorf("Can't create completion from no messages")
@@ -425,7 +426,7 @@ func (c *Client) CreateChatCompletionStream(
if part.FunctionCall != nil {
toolCalls = append(toolCalls, *part.FunctionCall)
} else if part.Text != "" {
output <- api.Chunk{
output <- provider.Chunk{
Content: part.Text,
TokenCount: uint(tokens),
}

View File

@@ -11,6 +11,7 @@ import (
"strings"
"git.mlow.ca/mlow/lmcli/pkg/api"
"git.mlow.ca/mlow/lmcli/pkg/api/provider"
)
type OllamaClient struct {
@@ -42,7 +43,7 @@ type OllamaResponse struct {
}
func createOllamaRequest(
params api.RequestParameters,
params provider.RequestParameters,
messages []api.Message,
) OllamaRequest {
requestMessages := make([]OllamaMessage, 0, len(messages))
@@ -82,7 +83,7 @@ func (c *OllamaClient) sendRequest(req *http.Request) (*http.Response, error) {
func (c *OllamaClient) CreateChatCompletion(
ctx context.Context,
params api.RequestParameters,
params provider.RequestParameters,
messages []api.Message,
) (*api.Message, error) {
if len(messages) == 0 {
@@ -122,9 +123,9 @@ func (c *OllamaClient) CreateChatCompletion(
func (c *OllamaClient) CreateChatCompletionStream(
ctx context.Context,
params api.RequestParameters,
params provider.RequestParameters,
messages []api.Message,
output chan<- api.Chunk,
output chan<- provider.Chunk,
) (*api.Message, error) {
if len(messages) == 0 {
return nil, fmt.Errorf("Can't create completion from no messages")
@@ -173,7 +174,7 @@ func (c *OllamaClient) CreateChatCompletionStream(
}
if len(streamResp.Message.Content) > 0 {
output <- api.Chunk{
output <- provider.Chunk{
Content: streamResp.Message.Content,
TokenCount: 1,
}

View File

@@ -11,6 +11,7 @@ import (
"strings"
"git.mlow.ca/mlow/lmcli/pkg/api"
"git.mlow.ca/mlow/lmcli/pkg/api/provider"
)
type OpenAIClient struct {
@@ -140,7 +141,7 @@ func convertToolCallToAPI(toolCalls []ToolCall) []api.ToolCall {
}
func createChatCompletionRequest(
params api.RequestParameters,
params provider.RequestParameters,
messages []api.Message,
) ChatCompletionRequest {
requestMessages := make([]ChatCompletionMessage, 0, len(messages))
@@ -219,7 +220,7 @@ func (c *OpenAIClient) sendRequest(ctx context.Context, r ChatCompletionRequest)
func (c *OpenAIClient) CreateChatCompletion(
ctx context.Context,
params api.RequestParameters,
params provider.RequestParameters,
messages []api.Message,
) (*api.Message, error) {
if len(messages) == 0 {
@@ -267,9 +268,9 @@ func (c *OpenAIClient) CreateChatCompletion(
func (c *OpenAIClient) CreateChatCompletionStream(
ctx context.Context,
params api.RequestParameters,
params provider.RequestParameters,
messages []api.Message,
output chan<- api.Chunk,
output chan<- provider.Chunk,
) (*api.Message, error) {
if len(messages) == 0 {
return nil, fmt.Errorf("Can't create completion from no messages")
@@ -333,7 +334,7 @@ func (c *OpenAIClient) CreateChatCompletionStream(
}
}
if len(delta.Content) > 0 {
output <- api.Chunk{
output <- provider.Chunk{
Content: delta.Content,
TokenCount: 1,
}

View File

@@ -0,0 +1,44 @@
package provider
import (
"context"
"git.mlow.ca/mlow/lmcli/pkg/api"
)
type ReplyCallback func(api.Message)
type Chunk struct {
Content string
TokenCount uint
}
type RequestParameters struct {
Model string
MaxTokens int
Temperature float32
TopP float32
Toolbox []api.ToolSpec
}
type ChatCompletionProvider interface {
// CreateChatCompletion requests a response to the provided messages.
// Replies are appended to the given replies struct, and the
// complete user-facing response is returned as a string.
CreateChatCompletion(
ctx context.Context,
params RequestParameters,
messages []api.Message,
) (*api.Message, error)
// Like CreateChageCompletion, except the response is streamed via
// the output channel as it's received.
CreateChatCompletionStream(
ctx context.Context,
params RequestParameters,
messages []api.Message,
chunks chan<- Chunk,
) (*api.Message, error)
}