| 103 | } |
| 104 | |
| 105 | func NewWithDependencies(cfg *config.Config, sloEngine interfaces.SLOEngine, telemetryExporter interfaces.TelemetryExporter) *Server { |
| 106 | adapters := make(map[string]interfaces.BackendAdapter, len(cfg.Backends)) |
| 107 | for _, backend := range cfg.Backends { |
| 108 | adapter, ok := adaptersreg.NewBackend(backend) |
| 109 | if !ok { |
| 110 | log.Printf("event=adapter_init_skipped backend=%s type=%s reason=%q", backend.Name, backend.Type, "unsupported backend type") |
| 111 | continue |
| 112 | } |
| 113 | adapters[backend.Name] = adapter |
| 114 | } |
| 115 | |
| 116 | costEngine := cost.NewSimpleEngine() |
| 117 | |
| 118 | ledger, err := requests.NewFromConfig(cfg) |
| 119 | if err != nil { |
| 120 | log.Printf("event=ledger_init_failed err=%v", err) |
| 121 | ledger = nil |
| 122 | } |
| 123 | |
| 124 | warnPerReplicaRateLimit(cfg) |
| 125 | |
| 126 | srv := &Server{ |
| 127 | cfg: cfg, |
| 128 | policy: policy.NewBasicEngine(cfg), |
| 129 | router: router.NewRuleRouter(cfg, costEngine), |
| 130 | reliability: reliability.NewManager(cfg, adapters), |
| 131 | sloEngine: sloEngine, |
| 132 | telemetry: telemetryExporter, |
| 133 | adapters: adapters, |
| 134 | ledger: ledger, |
| 135 | retrieval: retrieval.FromConfig(cfg), |
| 136 | rerank: retrieval.NewRerankFromConfig(cfg), |
| 137 | } |
| 138 | srv.initPrometheusMetrics() |
| 139 | return srv |
| 140 | } |
| 141 | |
| 142 | func (s *Server) Routes() http.Handler { |
| 143 | mux := http.NewServeMux() |