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) }