SendPrompt handles a single prompt request.
(ctx context.Context, req *pb.SendPromptRequest)
| 24 | |
| 25 | // SendPrompt handles a single prompt request. |
| 26 | func (h *Handler) SendPrompt(ctx context.Context, req *pb.SendPromptRequest) (*pb.SendPromptResponse, error) { |
| 27 | if req.Prompt == "" { |
| 28 | return nil, status.Errorf(codes.InvalidArgument, "%s", i18n.T("server.session.prompt_empty")) |
| 29 | } |
| 30 | |
| 31 | llmClient, err := h.getClient(req.Provider, req.Model, req.ClientApiKey, req.ProviderConfig) |
| 32 | if err != nil { |
| 33 | h.logger.Error(i18n.T("server.session.llm_client_failed"), zap.Error(err)) |
| 34 | return nil, status.Errorf(codes.Internal, "%s", i18n.T("server.session.get_client_error", err)) |
| 35 | } |
| 36 | |
| 37 | history := protoToHistory(req.History) |
| 38 | maxTokens := int(req.MaxTokens) |
| 39 | |
| 40 | enrichedPrompt := h.enrichPrompt(req.Prompt) |
| 41 | response, err := llmClient.SendPrompt(ctx, enrichedPrompt, history, maxTokens) |
| 42 | if err != nil { |
| 43 | h.logger.Error(i18n.T("server.session.send_prompt_failed"), zap.Error(err)) |
| 44 | return nil, status.Errorf(codes.Internal, "%s", i18n.T("server.session.llm_error", err)) |
| 45 | } |
| 46 | |
| 47 | provider := req.Provider |
| 48 | if provider == "" { |
| 49 | provider = h.defaultProvider |
| 50 | } |
| 51 | |
| 52 | return &pb.SendPromptResponse{ |
| 53 | Response: response, |
| 54 | Model: llmClient.GetModelName(), |
| 55 | Provider: provider, |
| 56 | }, nil |
| 57 | } |
| 58 | |
| 59 | // StreamPrompt handles a streaming prompt request. |
| 60 | func (h *Handler) StreamPrompt(req *pb.StreamPromptRequest, stream pb.ChatCLIService_StreamPromptServer) error { |