TheoKanning / openai-java

OpenAI Api Client in Java
MIT License
4.68k stars 1.16k forks source link

Assistant Assistance #477

Closed ArcticRaven closed 4 months ago

ArcticRaven commented 4 months ago

Been messing with this a few days, I'm not really sure what I'm doing wrong here.

Key notes is that I'm sending a List object to an Assistant. Expecting a String of less than 2k characters back. This needs to be returned by createSummary().

Any assistance would be heavily appreciated.

`package dev.arctic.utilities;

import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.theokanning.openai.OpenAiResponse; import com.theokanning.openai.assistants.Assistant; import com.theokanning.openai.completion.chat.ChatCompletionRequest; import com.theokanning.openai.completion.chat.ChatFunction; import com.theokanning.openai.completion.chat.ChatFunctionCall; import com.theokanning.openai.messages.Message; import com.theokanning.openai.messages.MessageRequest; import com.theokanning.openai.runs.RequiredAction; import com.theokanning.openai.runs.Run; import com.theokanning.openai.runs.RunCreateRequest; import com.theokanning.openai.service.ChatCompletionRequestMixIn; import com.theokanning.openai.service.ChatFunctionCallMixIn; import com.theokanning.openai.service.ChatFunctionMixIn; import com.theokanning.openai.service.OpenAiService; import com.theokanning.openai.threads.Thread; import com.theokanning.openai.threads.ThreadRequest;

import java.time.Duration; import java.util.List;

public class GPTSummarize {

static String token = System.getProperty("API_TOKEN");
static OpenAiService service = new OpenAiService(token);

public static String createSummary(List<String> formattedMessages) throws JsonProcessingException {

    ObjectMapper mapper = new ObjectMapper();
    mapper.addMixIn(ChatFunction.class, ChatFunctionMixIn.class);
    mapper.addMixIn(ChatCompletionRequest.class, ChatCompletionRequestMixIn.class);
    mapper.addMixIn(ChatFunctionCall.class, ChatFunctionCallMixIn.class);

    Assistant assistant = service.retrieveAssistant("asst_sUcvKUV5EzhUWu9EKb9HPOXu");

    ThreadRequest threadRequest = ThreadRequest.builder().build();
    Thread thread = service.createThread(threadRequest);

    MessageRequest messageRequest = MessageRequest.builder()
            .content(String.join("\n", formattedMessages))
            .build();

    Message message = service.createMessage(thread.getId(), messageRequest);

    RunCreateRequest runCreateRequest = RunCreateRequest.builder()
            .assistantId(assistant.getId())
            .build();

    Run run = service.createRun(thread.getId(), runCreateRequest);

    Run retrievedRun = service.retrieveRun(thread.getId(), run.getId());
    while (!(retrievedRun.getStatus().equals("completed"))
            && !(retrievedRun.getStatus().equals("failed"))
            && !(retrievedRun.getStatus().equals("requires_action"))) {
        retrievedRun = service.retrieveRun(thread.getId(), run.getId());
    }
    if (retrievedRun.getStatus().equals("requires_action")) {
        RequiredAction requiredAction = retrievedRun.getRequiredAction();
        System.out.println("requiredAction");

        while (!(retrievedRun.getStatus().equals("completed"))
                && !(retrievedRun.getStatus().equals("failed"))
                && !(retrievedRun.getStatus().equals("requires_action"))) {
            retrievedRun = service.retrieveRun(thread.getId(), run.getId());
        }

        OpenAiResponse<Message> response = service.listMessages(thread.getId());

        List<Message> messages = response.getData();

        System.out.println(mapper.writeValueAsString(messages));

        return mapper.writeValueAsString(messages);
    }
   return "No response from OpenAI";
}

}

`

ArcticRaven commented 4 months ago

Figured out another workable solution