MCPcopy Create free account
hub / github.com/coder/aibridge / ProcessRequest

Method ProcessRequest

intercept/responses/blocking.go:65–136  ·  view source on GitHub ↗
(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

63}
64
65func (i *BlockingResponsesInterceptor) ProcessRequest(w http.ResponseWriter, r *http.Request) (outErr error) {
66 ctx, span := i.tracer.Start(r.Context(), "Intercept.ProcessRequest", trace.WithAttributes(tracing.InterceptionAttributesFromContext(r.Context())...))
67 defer tracing.EndSpanErr(span, &outErr)
68
69 if err := i.validateRequest(ctx, w); err != nil {
70 return err
71 }
72
73 i.injectTools()
74
75 var (
76 response *responses.Response
77 upstreamErr error
78 respCopy responseCopier
79 firstResponseID string
80 )
81
82 prompt, promptFound, err := i.reqPayload.lastUserPrompt(ctx, i.logger)
83 if err != nil {
84 i.logger.Warn(ctx, "failed to get user prompt", slog.Error(err))
85 }
86 shouldLoop := true
87
88 for shouldLoop {
89 srv := i.newResponsesService()
90 respCopy = responseCopier{}
91
92 opts := i.requestOptions(&respCopy)
93 opts = append(opts, option.WithRequestTimeout(time.Second*600))
94
95 // TODO(ssncferreira): inject actor headers directly in the client-header
96 // middleware instead of using SDK options.
97 if actor := aibcontext.ActorFromContext(r.Context()); actor != nil && i.cfg.SendActorHeaders {
98 opts = append(opts, intercept.ActorHeadersAsOpenAIOpts(actor)...)
99 }
100
101 response, upstreamErr = i.newResponse(ctx, srv, opts)
102
103 if upstreamErr != nil || response == nil {
104 break
105 }
106
107 if firstResponseID == "" {
108 firstResponseID = response.ID
109 }
110
111 i.recordTokenUsage(ctx, response)
112 i.recordModelThoughts(ctx, response)
113
114 // Check if there any injected tools to invoke.
115 pending := i.getPendingInjectedToolCalls(response)
116 shouldLoop, err = i.handleInnerAgenticLoop(ctx, pending, response)
117 if err != nil {
118 i.sendCustomErr(ctx, w, http.StatusInternalServerError, err)
119 shouldLoop = false
120 }
121 }
122

Callers

nothing calls this directly

Calls 15

newResponseMethod · 0.95
EndSpanErrFunction · 0.92
ActorHeadersAsOpenAIOptsFunction · 0.92
StartMethod · 0.80
validateRequestMethod · 0.80
newResponsesServiceMethod · 0.80
requestOptionsMethod · 0.80
recordTokenUsageMethod · 0.80
recordModelThoughtsMethod · 0.80

Tested by

no test coverage detected