mirror of
https://github.com/hanzoai/search-go.git
synced 2026-10-30 18:22:58 +00:00
167 lines
5.3 KiB
Go
167 lines
5.3 KiB
Go
package meilisearch
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"strconv"
|
|
)
|
|
|
|
func (m *meilisearch) ChatCompletionStream(workspace string, query *ChatCompletionQuery) (*Stream[*ChatCompletionStreamChunk], error) {
|
|
return m.ChatCompletionStreamWithContext(context.Background(), workspace, query)
|
|
}
|
|
|
|
func (m *meilisearch) ChatCompletionStreamWithContext(ctx context.Context, workspace string, query *ChatCompletionQuery) (*Stream[*ChatCompletionStreamChunk], error) {
|
|
if query == nil {
|
|
return nil, fmt.Errorf("query cannot be nil")
|
|
}
|
|
|
|
if !query.Stream {
|
|
query.Stream = true
|
|
}
|
|
|
|
req := &internalRequest{
|
|
endpoint: fmt.Sprintf("/chats/%s/chat/completions", workspace),
|
|
method: http.MethodPost,
|
|
contentType: contentTypeJSON,
|
|
withRequest: query,
|
|
acceptedStatusCodes: []int{http.StatusOK},
|
|
}
|
|
|
|
internalError := &Error{
|
|
Endpoint: req.endpoint,
|
|
Method: req.method,
|
|
Function: req.functionName,
|
|
RequestToString: "empty request",
|
|
ResponseToString: "empty response",
|
|
MeilisearchApiError: meilisearchApiError{
|
|
Message: "empty meilisearch message",
|
|
},
|
|
StatusCodeExpected: req.acceptedStatusCodes,
|
|
encoder: m.client.encoder,
|
|
}
|
|
|
|
resp, err := m.client.sendRequest(ctx, req, internalError)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to execute request: %w", err)
|
|
}
|
|
|
|
dec := NewDecoder(resp)
|
|
if dec == nil {
|
|
// Defensive: if something went wrong constructing the decoder,
|
|
// close the response to avoid leaking the connection.
|
|
_ = resp.Body.Close()
|
|
return nil, fmt.Errorf("failed to create stream decoder: nil decoder")
|
|
}
|
|
|
|
return NewStream[*ChatCompletionStreamChunk](dec, m.client.jsonUnmarshal), nil
|
|
}
|
|
|
|
func (m *meilisearch) GetChatWorkspace(id string) (*ChatWorkspace, error) {
|
|
return m.GetChatWorkspaceWithContext(context.Background(), id)
|
|
}
|
|
|
|
func (m *meilisearch) GetChatWorkspaceWithContext(ctx context.Context, uid string) (*ChatWorkspace, error) {
|
|
resp := new(ChatWorkspace)
|
|
req := &internalRequest{
|
|
endpoint: "/chats/" + uid,
|
|
method: http.MethodGet,
|
|
withRequest: nil,
|
|
withResponse: resp,
|
|
acceptedStatusCodes: []int{http.StatusOK},
|
|
functionName: "GetChatWorkspace",
|
|
}
|
|
if err := m.client.executeRequest(ctx, req); err != nil {
|
|
return nil, err
|
|
}
|
|
return resp, nil
|
|
}
|
|
|
|
func (m *meilisearch) ListChatWorkspaces(query *ListChatWorkSpaceQuery) (*ListChatWorkspace, error) {
|
|
return m.ListChatWorkspacesWithContext(context.Background(), query)
|
|
}
|
|
|
|
func (m *meilisearch) ListChatWorkspacesWithContext(ctx context.Context, query *ListChatWorkSpaceQuery) (*ListChatWorkspace, error) {
|
|
resp := new(ListChatWorkspace)
|
|
req := &internalRequest{
|
|
endpoint: "/chats",
|
|
method: http.MethodGet,
|
|
withRequest: nil,
|
|
withResponse: resp,
|
|
withQueryParams: make(map[string]string),
|
|
acceptedStatusCodes: []int{http.StatusOK},
|
|
functionName: "ListChatWorkspaces",
|
|
}
|
|
|
|
if query != nil {
|
|
req.withQueryParams["limit"] = strconv.FormatInt(query.Limit, 10)
|
|
req.withQueryParams["offset"] = strconv.FormatInt(query.Offset, 10)
|
|
}
|
|
|
|
if err := m.client.executeRequest(ctx, req); err != nil {
|
|
return nil, err
|
|
}
|
|
return resp, nil
|
|
}
|
|
|
|
func (m *meilisearch) GetChatWorkspaceSettings(id string) (*ChatWorkspaceSettings, error) {
|
|
return m.GetChatWorkspaceSettingsWithContext(context.Background(), id)
|
|
}
|
|
|
|
func (m *meilisearch) GetChatWorkspaceSettingsWithContext(ctx context.Context, uid string) (*ChatWorkspaceSettings, error) {
|
|
resp := new(ChatWorkspaceSettings)
|
|
req := &internalRequest{
|
|
endpoint: "/chats/" + uid + "/settings",
|
|
method: http.MethodGet,
|
|
withRequest: nil,
|
|
withResponse: resp,
|
|
acceptedStatusCodes: []int{http.StatusOK},
|
|
functionName: "GetChatWorkspaceSettings",
|
|
}
|
|
if err := m.client.executeRequest(ctx, req); err != nil {
|
|
return nil, err
|
|
}
|
|
return resp, nil
|
|
}
|
|
|
|
func (m *meilisearch) UpdateChatWorkspace(id string, chatWorkspace *ChatWorkspaceSettings) (*ChatWorkspaceSettings, error) {
|
|
return m.UpdateChatWorkspaceWithContext(context.Background(), id, chatWorkspace)
|
|
}
|
|
|
|
func (m *meilisearch) UpdateChatWorkspaceWithContext(ctx context.Context, uid string, settings *ChatWorkspaceSettings) (*ChatWorkspaceSettings, error) {
|
|
resp := new(ChatWorkspaceSettings)
|
|
req := &internalRequest{
|
|
endpoint: "/chats/" + uid + "/settings",
|
|
method: http.MethodPatch,
|
|
withRequest: settings,
|
|
withResponse: resp,
|
|
contentType: contentTypeJSON,
|
|
acceptedStatusCodes: []int{http.StatusOK},
|
|
functionName: "UpdateChatWorkspace",
|
|
}
|
|
if err := m.client.executeRequest(ctx, req); err != nil {
|
|
return nil, err
|
|
}
|
|
return resp, nil
|
|
}
|
|
|
|
func (m *meilisearch) ResetChatWorkspace(id string) (*ChatWorkspaceSettings, error) {
|
|
return m.ResetChatWorkspaceWithContext(context.Background(), id)
|
|
}
|
|
|
|
func (m *meilisearch) ResetChatWorkspaceWithContext(ctx context.Context, uid string) (*ChatWorkspaceSettings, error) {
|
|
resp := new(ChatWorkspaceSettings)
|
|
req := &internalRequest{
|
|
endpoint: "/chats/" + uid + "/settings",
|
|
method: http.MethodDelete,
|
|
withRequest: nil,
|
|
withResponse: resp,
|
|
acceptedStatusCodes: []int{http.StatusOK},
|
|
functionName: "ResetChatWorkspace",
|
|
}
|
|
if err := m.client.executeRequest(ctx, req); err != nil {
|
|
return nil, err
|
|
}
|
|
return resp, nil
|
|
}
|