fc644ecd6e
Reemplaza el scaffold del echobot por la plataforma completa de bots traida desde ~/DataProyects/Github/agents_and_robots tras la operacion Matrix-out: los bots ya no hablan por Matrix sino por el bus unibus (modelo todo-rooms + E2E via shell/transportunibus sobre github.com/enmanuel/unibus/pkg/client). - go.mod: replace de unibus -> ../unibus y de fn-registry -> ../../../.. (paths relativos reajustados a la nueva ubicacion dentro de fn_registry). - app.md: bump a 0.2.0, descripcion + arquitectura + comandos + gotchas reales. - modulo Go conservado como github.com/enmanuel/agents (sin reescribir imports). agents_and_robots queda archivado como museo de la era Matrix.
49 lines
1.5 KiB
Go
49 lines
1.5 KiB
Go
package orchestration
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"strings"
|
|
|
|
coretypes "github.com/enmanuel/agents/pkg/llm"
|
|
"github.com/enmanuel/agents/pkg/orchestration"
|
|
)
|
|
|
|
// evaluate asks the LLM to score the quality of a bot's response.
|
|
func (o *Orchestrator) evaluate(ctx context.Context, question string, response orchestration.BotResponse) orchestration.QualityScore {
|
|
userContent := fmt.Sprintf("Question: %s\n\nResponse from %s:\n%s", question, response.BotID, response.Text)
|
|
|
|
resp, err := o.llm(ctx, coretypes.CompletionRequest{
|
|
Model: o.cfg.LLM.Primary.Model,
|
|
MaxTokens: o.cfg.LLM.Primary.MaxTokens,
|
|
Temperature: o.cfg.LLM.Primary.Temperature,
|
|
SystemPrompt: o.qualityPrompt,
|
|
Messages: []coretypes.Message{
|
|
{Role: coretypes.RoleUser, Content: userContent},
|
|
},
|
|
})
|
|
if err != nil {
|
|
o.logger.Error("quality evaluation LLM call failed", "err", err)
|
|
// On LLM failure, assume quality is good enough to stop the pipeline
|
|
return orchestration.QualityScore{
|
|
Score: 1.0,
|
|
Continue: false,
|
|
Reason: fmt.Sprintf("evaluation failed: %s, assuming good quality", err),
|
|
}
|
|
}
|
|
|
|
var qs orchestration.QualityScore
|
|
if err := json.Unmarshal([]byte(strings.TrimSpace(resp.Content)), &qs); err != nil {
|
|
o.logger.Warn("failed to parse quality score", "content", resp.Content, "err", err)
|
|
// On parse failure, assume good quality
|
|
return orchestration.QualityScore{
|
|
Score: 1.0,
|
|
Continue: false,
|
|
Reason: fmt.Sprintf("parse failed: %s", err),
|
|
}
|
|
}
|
|
|
|
return qs
|
|
}
|