-
Notifications
You must be signed in to change notification settings - Fork 303
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'develop' into feature/athena/popup-accept-external-llm
- Loading branch information
Showing
131 changed files
with
2,388 additions
and
857 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
30 changes: 30 additions & 0 deletions
30
src/main/java/de/tum/cit/aet/artemis/core/config/LicenseConfiguration.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package de.tum.cit.aet.artemis.core.config; | ||
|
||
import static de.tum.cit.aet.artemis.core.config.Constants.PROFILE_CORE; | ||
|
||
import jakarta.annotation.Nullable; | ||
|
||
import org.springframework.boot.context.properties.ConfigurationProperties; | ||
import org.springframework.context.annotation.Profile; | ||
|
||
@Profile(PROFILE_CORE) | ||
@ConfigurationProperties(prefix = "artemis.licenses") | ||
public class LicenseConfiguration { | ||
|
||
private final MatLabLicense matlab; | ||
|
||
public record MatLabLicense(String licenseServer) { | ||
} | ||
|
||
public LicenseConfiguration(MatLabLicense matlab) { | ||
this.matlab = matlab; | ||
} | ||
|
||
@Nullable | ||
public String getMatlabLicenseServer() { | ||
if (matlab == null) { | ||
return null; | ||
} | ||
return matlab.licenseServer(); | ||
} | ||
} |
97 changes: 97 additions & 0 deletions
97
src/main/java/de/tum/cit/aet/artemis/iris/service/IrisRewritingService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
package de.tum.cit.aet.artemis.iris.service; | ||
|
||
import static de.tum.cit.aet.artemis.core.config.Constants.PROFILE_IRIS; | ||
|
||
import java.util.Optional; | ||
|
||
import org.springframework.context.annotation.Profile; | ||
import org.springframework.stereotype.Service; | ||
|
||
import de.tum.cit.aet.artemis.core.domain.Course; | ||
import de.tum.cit.aet.artemis.core.domain.LLMServiceType; | ||
import de.tum.cit.aet.artemis.core.domain.User; | ||
import de.tum.cit.aet.artemis.core.repository.CourseRepository; | ||
import de.tum.cit.aet.artemis.core.repository.UserRepository; | ||
import de.tum.cit.aet.artemis.core.service.LLMTokenUsageService; | ||
import de.tum.cit.aet.artemis.iris.service.pyris.PyrisJobService; | ||
import de.tum.cit.aet.artemis.iris.service.pyris.PyrisPipelineService; | ||
import de.tum.cit.aet.artemis.iris.service.pyris.dto.rewriting.PyrisRewritingPipelineExecutionDTO; | ||
import de.tum.cit.aet.artemis.iris.service.pyris.dto.rewriting.PyrisRewritingStatusUpdateDTO; | ||
import de.tum.cit.aet.artemis.iris.service.pyris.dto.rewriting.RewritingVariant; | ||
import de.tum.cit.aet.artemis.iris.service.pyris.job.RewritingJob; | ||
import de.tum.cit.aet.artemis.iris.service.websocket.IrisWebsocketService; | ||
|
||
/** | ||
* Service to handle the rewriting subsystem of Iris. | ||
*/ | ||
@Service | ||
@Profile(PROFILE_IRIS) | ||
public class IrisRewritingService { | ||
|
||
private final PyrisPipelineService pyrisPipelineService; | ||
|
||
private final LLMTokenUsageService llmTokenUsageService; | ||
|
||
private final CourseRepository courseRepository; | ||
|
||
private final IrisWebsocketService websocketService; | ||
|
||
private final PyrisJobService pyrisJobService; | ||
|
||
private final UserRepository userRepository; | ||
|
||
public IrisRewritingService(PyrisPipelineService pyrisPipelineService, LLMTokenUsageService llmTokenUsageService, CourseRepository courseRepository, | ||
IrisWebsocketService websocketService, PyrisJobService pyrisJobService, UserRepository userRepository) { | ||
this.pyrisPipelineService = pyrisPipelineService; | ||
this.llmTokenUsageService = llmTokenUsageService; | ||
this.courseRepository = courseRepository; | ||
this.websocketService = websocketService; | ||
this.pyrisJobService = pyrisJobService; | ||
this.userRepository = userRepository; | ||
} | ||
|
||
/** | ||
* Executes the rewriting pipeline on Pyris | ||
* | ||
* @param user the user for which the pipeline should be executed | ||
* @param course the course for which the pipeline should be executed | ||
* @param variant the rewriting variant to be used | ||
* @param toBeRewritten the text to be rewritten | ||
*/ | ||
public void executeRewritingPipeline(User user, Course course, RewritingVariant variant, String toBeRewritten) { | ||
// @formatter:off | ||
pyrisPipelineService.executePipeline( | ||
"rewriting", | ||
variant.toString(), | ||
Optional.empty(), | ||
pyrisJobService.createTokenForJob(token -> new RewritingJob(token, course.getId(), user.getId())), | ||
executionDto -> new PyrisRewritingPipelineExecutionDTO(executionDto, toBeRewritten), | ||
stages -> websocketService.send(user.getLogin(), websocketTopic(course.getId()), new PyrisRewritingStatusUpdateDTO(stages, null, null)) | ||
); | ||
// @formatter:on | ||
} | ||
|
||
/** | ||
* Takes a status update from Pyris containing a new rewriting result and sends it to the client via websocket | ||
* | ||
* @param job Job related to the status update | ||
* @param statusUpdate the status update containing text recommendations | ||
* @return the same job that was passed in | ||
*/ | ||
public RewritingJob handleStatusUpdate(RewritingJob job, PyrisRewritingStatusUpdateDTO statusUpdate) { | ||
Course course = courseRepository.findByIdForUpdateElseThrow(job.courseId()); | ||
if (statusUpdate.tokens() != null && !statusUpdate.tokens().isEmpty()) { | ||
llmTokenUsageService.saveLLMTokenUsage(statusUpdate.tokens(), LLMServiceType.IRIS, builder -> builder.withCourse(course.getId()).withUser(job.userId())); | ||
} | ||
|
||
var user = userRepository.findById(job.userId()).orElseThrow(); | ||
websocketService.send(user.getLogin(), websocketTopic(job.courseId()), statusUpdate); | ||
|
||
return job; | ||
} | ||
|
||
private static String websocketTopic(long courseId) { | ||
return "rewriting/" + courseId; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
9 changes: 9 additions & 0 deletions
9
...n/java/de/tum/cit/aet/artemis/iris/service/pyris/dto/data/PyrisRewriteTextRequestDTO.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package de.tum.cit.aet.artemis.iris.service.pyris.dto.data; | ||
|
||
import com.fasterxml.jackson.annotation.JsonInclude; | ||
|
||
import de.tum.cit.aet.artemis.iris.service.pyris.dto.rewriting.RewritingVariant; | ||
|
||
@JsonInclude(JsonInclude.Include.NON_EMPTY) | ||
public record PyrisRewriteTextRequestDTO(String toBeRewritten, RewritingVariant variant) { | ||
} |
15 changes: 15 additions & 0 deletions
15
.../cit/aet/artemis/iris/service/pyris/dto/rewriting/PyrisRewritingPipelineExecutionDTO.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package de.tum.cit.aet.artemis.iris.service.pyris.dto.rewriting; | ||
|
||
import com.fasterxml.jackson.annotation.JsonInclude; | ||
|
||
import de.tum.cit.aet.artemis.iris.service.pyris.dto.PyrisPipelineExecutionDTO; | ||
|
||
/** | ||
* DTO to execute the Iris rewriting pipeline on Pyris | ||
* | ||
* @param execution The pipeline execution details | ||
* @param toBeRewritten The text to be rewritten | ||
*/ | ||
@JsonInclude(JsonInclude.Include.NON_EMPTY) | ||
public record PyrisRewritingPipelineExecutionDTO(PyrisPipelineExecutionDTO execution, String toBeRewritten) { | ||
} |
Oops, something went wrong.