| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package tools
- import (
- "context"
- "encoding/json"
- )
- type ToolInfo struct {
- Name string
- Description string
- Parameters map[string]any
- Required []string
- }
- type toolResponseType string
- type (
- sessionIDContextKey string
- messageIDContextKey string
- )
- const (
- ToolResponseTypeText toolResponseType = "text"
- ToolResponseTypeImage toolResponseType = "image"
- SessionIDContextKey sessionIDContextKey = "session_id"
- MessageIDContextKey messageIDContextKey = "message_id"
- )
- type ToolResponse struct {
- Type toolResponseType `json:"type"`
- Content string `json:"content"`
- Metadata string `json:"metadata,omitempty"`
- IsError bool `json:"is_error"`
- }
- func NewTextResponse(content string) ToolResponse {
- return ToolResponse{
- Type: ToolResponseTypeText,
- Content: content,
- }
- }
- func WithResponseMetadata(response ToolResponse, metadata any) ToolResponse {
- if metadata != nil {
- metadataBytes, err := json.Marshal(metadata)
- if err != nil {
- return response
- }
- response.Metadata = string(metadataBytes)
- }
- return response
- }
- func NewTextErrorResponse(content string) ToolResponse {
- return ToolResponse{
- Type: ToolResponseTypeText,
- Content: content,
- IsError: true,
- }
- }
- type ToolCall struct {
- ID string `json:"id"`
- Name string `json:"name"`
- Input string `json:"input"`
- }
- type BaseTool interface {
- Info() ToolInfo
- Run(ctx context.Context, params ToolCall) (ToolResponse, error)
- }
- func GetContextValues(ctx context.Context) (string, string) {
- sessionID := ctx.Value(SessionIDContextKey)
- messageID := ctx.Value(MessageIDContextKey)
- if sessionID == nil {
- return "", ""
- }
- if messageID == nil {
- return sessionID.(string), ""
- }
- return sessionID.(string), messageID.(string)
- }
|