package caps import ( "context" abiv1 "git.dev.alexdunmow.com/block/pluginsdk/abi/v1" "git.dev.alexdunmow.com/block/pluginsdk/plugin" "github.com/google/uuid" ) // embeddingsStub implements plugin.EmbeddingService over embeddings.* // capability calls. type embeddingsStub struct{ base } var _ plugin.EmbeddingService = (*embeddingsStub)(nil) func (s *embeddingsStub) GenerateEmbedding(ctx context.Context, text string) ([]float32, error) { resp := &abiv1.EmbeddingsGenerateEmbeddingResponse{} req := &abiv1.EmbeddingsGenerateEmbeddingRequest{Text: text} if err := s.invoke(ctx, "generate_embedding", req, resp); err != nil { return nil, err } return resp.GetEmbedding(), nil } func (s *embeddingsStub) EmbedContent(ctx context.Context, sourceType string, sourceID uuid.UUID, text string) (bool, error) { resp := &abiv1.EmbeddingsEmbedContentResponse{} req := &abiv1.EmbeddingsEmbedContentRequest{ SourceType: sourceType, SourceId: sourceID.String(), Text: text, } if err := s.invoke(ctx, "embed_content", req, resp); err != nil { return false, err } return resp.GetEmbedded(), nil } // IsAvailable has no error channel; a transport failure reports unavailable. func (s *embeddingsStub) IsAvailable() bool { resp := &abiv1.EmbeddingsIsAvailableResponse{} if err := s.invoke(context.Background(), "is_available", &abiv1.EmbeddingsIsAvailableRequest{}, resp); err != nil { return false } return resp.GetAvailable() }