]> git.giacomolli.uk - onechat/blobdiff - model.go
Manage source routes with root tools
[onechat] / model.go
index 7c856431124af275fa96c90582b0cdb1bb74be85..507fbb1a260265dbdd0f61c817ba33aef07d9cfa 100644 (file)
--- a/model.go
+++ b/model.go
@@ -98,8 +98,10 @@ func modelUserMessage(texts ...string) any {
 // modelOutputText returns the text of the message items of output.
 func modelOutputText(output []json.RawMessage) (string, error) {
        var text strings.Builder
 // modelOutputText returns the text of the message items of output.
 func modelOutputText(output []json.RawMessage) (string, error) {
        var text strings.Builder
+
        for _, raw := range output {
                var item ModelOutputItem
        for _, raw := range output {
                var item ModelOutputItem
+
                err := json.Unmarshal(raw, &item)
                if err != nil {
                        return "", fmt.Errorf("decode output item: %w", err)
                err := json.Unmarshal(raw, &item)
                if err != nil {
                        return "", fmt.Errorf("decode output item: %w", err)
@@ -131,6 +133,7 @@ type ModelAPIKey string
 // Authorize sets the key as the bearer token.
 func (k ModelAPIKey) Authorize(ctx context.Context, header http.Header) error {
        header.Set("Authorization", "Bearer "+string(k))
 // Authorize sets the key as the bearer token.
 func (k ModelAPIKey) Authorize(ctx context.Context, header http.Header) error {
        header.Set("Authorization", "Bearer "+string(k))
+
        return ctx.Err()
 }
 
        return ctx.Err()
 }
 
@@ -214,6 +217,7 @@ func (c *ModelClient) Create(ctx context.Context, request ModelRequest) (ModelRe
 
        httpRequest.Header.Set("Content-Type", "application/json")
        httpRequest.Header.Set("Accept", "text/event-stream")
 
        httpRequest.Header.Set("Content-Type", "application/json")
        httpRequest.Header.Set("Accept", "text/event-stream")
+
        err = c.auth.Authorize(ctx, httpRequest.Header)
        if err != nil {
                return ModelResponse{}, fmt.Errorf("authorize model call: %w", err)
        err = c.auth.Authorize(ctx, httpRequest.Header)
        if err != nil {
                return ModelResponse{}, fmt.Errorf("authorize model call: %w", err)
@@ -434,6 +438,7 @@ type ModelWireError struct {
 // without the turn state.
 func modelQuotaHeaders(header http.Header) map[string]string {
        var quota map[string]string
 // without the turn state.
 func modelQuotaHeaders(header http.Header) map[string]string {
        var quota map[string]string
+
        for name, values := range header {
                if !strings.HasPrefix(name, modelQuotaPrefix) || name == modelTurnStateHeader || len(values) == 0 {
                        continue
        for name, values := range header {
                if !strings.HasPrefix(name, modelQuotaPrefix) || name == modelTurnStateHeader || len(values) == 0 {
                        continue
@@ -454,8 +459,11 @@ func modelQuotaHeaders(header http.Header) map[string]string {
 // the completed response when the stream sent none.
 func modelReadStream(stream io.Reader) (ModelResponse, error) {
        var response ModelResponse
 // the completed response when the stream sent none.
 func modelReadStream(stream io.Reader) (ModelResponse, error) {
        var response ModelResponse
+
        reader := bufio.NewReader(stream)
        reader := bufio.NewReader(stream)
+
        var data bytes.Buffer
        var data bytes.Buffer
+
        for {
                line, err := reader.ReadBytes('\n')
                if err != nil && !errors.Is(err, io.EOF) {
        for {
                line, err := reader.ReadBytes('\n')
                if err != nil && !errors.Is(err, io.EOF) {
@@ -472,6 +480,7 @@ func modelReadStream(stream io.Reader) (ModelResponse, error) {
                } else if data.Len() > 0 {
                        done, eventErr := modelReadEvent(&response, data.Bytes())
                        data.Reset()
                } else if data.Len() > 0 {
                        done, eventErr := modelReadEvent(&response, data.Bytes())
                        data.Reset()
+
                        if eventErr != nil || done {
                                return response, eventErr
                        }
                        if eventErr != nil || done {
                                return response, eventErr
                        }
@@ -487,6 +496,7 @@ func modelReadStream(stream io.Reader) (ModelResponse, error) {
 // stream.
 func modelReadEvent(response *ModelResponse, data []byte) (bool, error) {
        var event ModelStreamEvent
 // stream.
 func modelReadEvent(response *ModelResponse, data []byte) (bool, error) {
        var event ModelStreamEvent
+
        err := json.Unmarshal(data, &event)
        if err != nil {
                return true, fmt.Errorf("decode stream event: %w", err)
        err := json.Unmarshal(data, &event)
        if err != nil {
                return true, fmt.Errorf("decode stream event: %w", err)