package main
import (
"bytes"
"context"
"encoding/json"
"fmt"
"io"
"log"
"mime/multipart"
"net/http"
"os"
"github.com/deeprails/deeprails-go-sdk"
"github.com/deeprails/deeprails-go-sdk/option"
)
func uploadFile(apiKey, path string) (string, error) {
file, err := os.Open(path)
if err != nil {
return "", err
}
defer file.Close()
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, err := writer.CreateFormFile("files", file.Name())
if err != nil {
return "", err
}
if _, err := io.Copy(part, file); err != nil {
return "", err
}
if err := writer.Close(); err != nil {
return "", err
}
req, err := http.NewRequest(http.MethodPost, "https://api.deeprails.com/files/upload", body)
if err != nil {
return "", err
}
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Content-Type", writer.FormDataContentType())
resp, err := http.DefaultClient.Do(req)
if err != nil {
return "", err
}
defer resp.Body.Close()
if resp.StatusCode >= http.StatusBadRequest {
return "", fmt.Errorf("file upload failed with status %s", resp.Status)
}
var fileResponses []deeprails.FileResponse
if err := json.NewDecoder(resp.Body).Decode(&fileResponses); err != nil {
return "", err
}
if len(fileResponses) == 0 || fileResponses[0].FileID == "" {
return "", fmt.Errorf("file upload failed")
}
return fileResponses[0].FileID, nil
}
func main() {
apiKey := "YOUR_API_KEY"
client := deeprails.NewClient(option.WithAPIKey(apiKey))
fileID, err := uploadFile(apiKey, "example.txt")
if err != nil {
log.Fatal(err)
}
// Create a monitor
monitorResponse, err := client.Monitor.New(context.TODO(), deeprails.MonitorNewParams{
Name: deeprails.F("Production Chat Assistant Monitor"),
Description: deeprails.F("Monitoring our production chatbot responses"),
GuardrailMetrics: deeprails.F([]deeprails.MonitorNewParamsGuardrailMetric{
deeprails.MonitorNewParamsGuardrailMetricCorrectness,
deeprails.MonitorNewParamsGuardrailMetricCompleteness,
}),
WebSearch: deeprails.F(true),
FileSearch: deeprails.F([]string{fileID}),
ContextAwareness: deeprails.F(true),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Monitor created with ID: %s\n", monitorResponse.MonitorID)
}