57 lines
2.5 KiB
Go
57 lines
2.5 KiB
Go
package main
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
"github.com/descrybe/descrybe-v2/apps/api/internal/aiprovider"
|
|
"github.com/descrybe/descrybe-v2/apps/api/internal/config"
|
|
"github.com/descrybe/descrybe-v2/apps/api/internal/db"
|
|
"github.com/descrybe/descrybe-v2/apps/api/internal/platformsettings"
|
|
"github.com/descrybe/descrybe-v2/apps/api/internal/processing"
|
|
"github.com/google/uuid"
|
|
)
|
|
func main() {
|
|
cfg, err := config.Load()
|
|
if err != nil { panic(err) }
|
|
ctx := context.Background()
|
|
pool, err := db.NewPool(ctx, cfg.DatabaseURL, db.PoolOptions{
|
|
MaxConns: 4, MinConns: 1, MaxConnLifetime: time.Hour, HealthCheckPeriod: 30*time.Second,
|
|
})
|
|
if err != nil { panic(err) }
|
|
defer pool.Close()
|
|
plat := platformsettings.NewService(pool, platformsettings.EnvConfig{
|
|
AppEncryptionKey:cfg.AppEncryptionKey, CredentialsEncryptionKey:cfg.CredentialsEncryptionKey,
|
|
TokenSigningSecret:cfg.TokenSigningSecret, DatabaseURL:cfg.DatabaseURL,
|
|
OpenAIAPIKey:cfg.OpenAIAPIKey, OpenAIBaseURL:cfg.OpenAIBaseURL, OpenAIModel:cfg.OpenAIModel,
|
|
})
|
|
ai := aiprovider.NewService(pool, aiprovider.EnvConfig{
|
|
AppEncryptionKey:cfg.AppEncryptionKey, CredentialsEncryptionKey:cfg.CredentialsEncryptionKey,
|
|
TokenSigningSecret:cfg.TokenSigningSecret, DatabaseURL:cfg.DatabaseURL,
|
|
OpenAIAPIKey:cfg.OpenAIAPIKey, OpenAIBaseURL:cfg.OpenAIBaseURL, OpenAIModel:cfg.OpenAIModel,
|
|
})
|
|
ai.Platform = plat
|
|
companyID := uuid.MustParse("604f23a8-b66e-4b21-8b45-0d72b68f4790")
|
|
c, mode, byok, err := ai.ResolveCompleterForRole(ctx, companyID, aiprovider.RoleProcessing)
|
|
if err != nil { panic(err) }
|
|
client := c.(*processing.OpenAIClient)
|
|
fmt.Printf("base=%s model=%s mode=%s byok=%v mock=%v\n", client.BaseURL, client.Model, mode, byok, processing.IsMockOrLoopbackBaseURL(client.BaseURL))
|
|
url := strings.TrimRight(client.BaseURL,"/")+"/models"
|
|
for i:=1; i<=3; i++ {
|
|
req,_ := http.NewRequestWithContext(ctx, "GET", url, nil)
|
|
req.Header.Set("Authorization", "Bearer "+client.APIKey)
|
|
start := time.Now()
|
|
resp, err := http.DefaultClient.Do(req)
|
|
elapsed := time.Since(start).Round(time.Millisecond)
|
|
if err != nil { fmt.Printf("try%d err=%v elapsed=%s\n", i, err, elapsed); time.Sleep(2*time.Second); continue }
|
|
b,_ := io.ReadAll(io.LimitReader(resp.Body, 240)); resp.Body.Close()
|
|
fmt.Printf("try%d status=%d elapsed=%s body=%q\n", i, resp.StatusCode, elapsed, string(b))
|
|
if resp.StatusCode == 200 { os.Exit(0) }
|
|
time.Sleep(3*time.Second)
|
|
}
|
|
os.Exit(2)
|
|
}
|