Ctrl K
ComunidadGuías…

internal/memory/adapter.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package memory

import (
	"context"
	"strings"

	"github.com/yeomyeonggeori/bluememo"
	"github.com/yeomyeonggeori/blueprotocol/model"
)

const RememberContentRuneLimit = 600

type ContainedCircleResolver interface {
	ContainedCircles() map[string][]string
}

type LanguageModel struct {
	Provider model.LanguageModelProvider
}

func (languageModel LanguageModel) GenerateStructured(ctx context.Context, request bluememo.StructuredRequest) (string, error) {
	response, errorValue := languageModel.Provider.GenerateStructuredResponse(ctx, model.StructuredResponseRequest{
		Messages: []model.Message{
			{Role: "system", Content: request.Instruction},
			{Role: "user", Content: request.Subject},
		},
		StructuredOutputSchema: model.StructuredOutputSchema{
			Name:               request.SchemaName,
			Document:           request.SchemaDocument,
			IsStrictlyEnforced: true,
		},
	})
	if errorValue != nil {
		return "", errorValue
	}
	return response.Content, nil
}

func RememberContentGateMessage(content string) string {
	trimmedContent := strings.TrimSpace(content)
	if trimmedContent == "" {
		return "memory_remember content is required"
	}
	if len([]rune(trimmedContent)) > RememberContentRuneLimit {
		return "memory_remember content must be a single compact fact"
	}
	return ""
}