-
Notifications
You must be signed in to change notification settings - Fork 303
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Iris
: Add a temporary ChatGPT interface for specific user groups and exercises
#10167
Conversation
Warning Rate limit exceeded@bassner has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 10 minutes and 50 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (1)
WalkthroughThe pull request introduces conditional modifications across several components in the application. In the Changes
Possibly related PRs
Suggested labels
Suggested reviewers
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (1)
src/main/java/de/tum/cit/aet/artemis/iris/service/session/IrisExerciseChatSessionService.java (1)
174-181
: Consider extracting the experiment logic into a dedicated service.The experimental group assignment logic is duplicated across files and mixed with regular business logic. This violates the Single Responsibility Principle and makes it harder to maintain and eventually remove the temporary code.
Consider creating an
ExperimentService
to encapsulate all experiment-related logic:@Service public class ExperimentService { private static final String ICER_PAPER_FEATURE_FLAG = "ICER 2025 Paper"; private static final int TOTAL_GROUPS = 3; public enum ExperimentGroup { CHATGPT(0), IRIS(1), CONTROL(2); private final int modValue; ExperimentGroup(int modValue) { this.modValue = modValue; } } public boolean isIcerPaperExperiment(Exercise exercise) { return exercise.getProblemStatement() != null && exercise.getProblemStatement().contains(ICER_PAPER_FEATURE_FLAG); } public ExperimentGroup getExperimentGroup(User user) { int group = user.getId() % TOTAL_GROUPS; return Arrays.stream(ExperimentGroup.values()) .filter(g -> g.modValue == group) .findFirst() .orElse(ExperimentGroup.IRIS); } }
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
src/main/resources/public/images/chatgpt-temp/ChatGPT_logo.svg
is excluded by!**/*.svg
,!**/*.svg
📒 Files selected for processing (2)
src/main/java/de/tum/cit/aet/artemis/exercise/web/ExerciseResource.java
(1 hunks)src/main/java/de/tum/cit/aet/artemis/iris/service/session/IrisExerciseChatSessionService.java
(1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
src/main/java/de/tum/cit/aet/artemis/iris/service/session/IrisExerciseChatSessionService.java (1)
Pattern src/main/java/**/*.java
: naming:CamelCase; principles:{single_responsibility,small_methods,no_duplication}; db:{perf_queries,datetime_not_timestamp}; rest:{stateless,singleton,delegate_logic,http_only,minimal_dtos}; dtos:{java_records,no_entities,min_data,single_resp}; di:constructor_injection; kiss:simple_code; file_handling:os_indep_paths; practices:{least_access,avoid_transactions,code_reuse,static_member_ref,prefer_primitives}; sql:{param_annotation,uppercase,avoid_subqueries};java:avoid_star_imports
src/main/java/de/tum/cit/aet/artemis/exercise/web/ExerciseResource.java (1)
Pattern src/main/java/**/*.java
: naming:CamelCase; principles:{single_responsibility,small_methods,no_duplication}; db:{perf_queries,datetime_not_timestamp}; rest:{stateless,singleton,delegate_logic,http_only,minimal_dtos}; dtos:{java_records,no_entities,min_data,single_resp}; di:constructor_injection; kiss:simple_code; file_handling:os_indep_paths; practices:{least_access,avoid_transactions,code_reuse,static_member_ref,prefer_primitives}; sql:{param_annotation,uppercase,avoid_subqueries};java:avoid_star_imports
⏰ Context from checks skipped due to timeout of 90000ms (6)
- GitHub Check: client-style
- GitHub Check: client-tests
- GitHub Check: server-tests
- GitHub Check: Build and Push Docker Image
- GitHub Check: Analyse
- GitHub Check: Build .war artifact
src/main/java/de/tum/cit/aet/artemis/exercise/web/ExerciseResource.java
Outdated
Show resolved
Hide resolved
src/main/java/de/tum/cit/aet/artemis/iris/service/session/IrisExerciseChatSessionService.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (3)
src/main/webapp/app/iris/exercise-chatbot/exercise-chatbot-button.component.ts (1)
55-56
: Consider documenting the temporary feature's expiration.The TODO comment indicates this is a temporary feature. Consider adding:
- An expiration date or milestone
- A tracking issue for removal
- Documentation about the feature's purpose and scope
src/main/webapp/app/iris/exercise-chatbot/exercise-chatbot-button.component.html (1)
20-25
: Improve the ChatGPT logo implementation.Consider the following improvements:
- Move the hardcoded image path to a constant or configuration
- Move the inline style to the component's stylesheet
- Use a more descriptive alt text for accessibility
Apply this diff:
- <img src="public/images/chatgpt-temp/ChatGPT_logo.svg" alt="Iris Logo" style="height: 70px" class="iris-logo" (click)="handleButtonClick()" /> + <img [src]="chatGptLogoPath" alt="ChatGPT Assistant Logo" class="iris-logo chatgpt-logo" (click)="handleButtonClick()" />Add to the component's TypeScript file:
readonly chatGptLogoPath = 'public/images/chatgpt-temp/ChatGPT_logo.svg';Add to the component's SCSS file:
.chatgpt-logo { height: 70px; }src/main/webapp/app/overview/exercise-details/course-exercise-details.component.html (1)
193-194
: Ensure consistent TODO comments across files.The TODO comment should be consistent with the one in the component definition. Consider moving all temporary feature documentation to a central location.
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
src/main/webapp/app/iris/exercise-chatbot/exercise-chatbot-button.component.html
(1 hunks)src/main/webapp/app/iris/exercise-chatbot/exercise-chatbot-button.component.ts
(1 hunks)src/main/webapp/app/overview/exercise-details/course-exercise-details.component.html
(1 hunks)src/main/webapp/app/overview/exercise-details/course-exercise-details.component.ts
(4 hunks)
🧰 Additional context used
📓 Path-based instructions (4)
src/main/webapp/app/iris/exercise-chatbot/exercise-chatbot-button.component.html (1)
Pattern src/main/webapp/**/*.html
: @if and @for are new and valid Angular syntax replacing *ngIf and *ngFor. They should always be used over the old style.
src/main/webapp/app/iris/exercise-chatbot/exercise-chatbot-button.component.ts (1)
src/main/webapp/app/overview/exercise-details/course-exercise-details.component.ts (1)
🪛 Biome (1.9.4)
src/main/webapp/app/overview/exercise-details/course-exercise-details.component.ts
[error] 231-231: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
⏰ Context from checks skipped due to timeout of 90000ms (8)
- GitHub Check: Codacy Static Code Analysis
- GitHub Check: client-tests-selected
- GitHub Check: client-tests
- GitHub Check: server-tests
- GitHub Check: Build and Push Docker Image
- GitHub Check: server-style
- GitHub Check: Build .war artifact
- GitHub Check: Analyse
General
Special hacks for ICER 2025 PaperGeneral
: Special hacks for ICER 2025 Paper
General
: Special hacks for ICER 2025 PaperIris
: Special hacks for ICER 2025 Paper
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
🧹 Nitpick comments (4)
src/main/webapp/app/iris/base-chatbot/iris-base-chatbot.component.ts (1)
148-148
: Add JSDoc comment for the isChatGptWrapper input property.While the implementation is correct, adding documentation would help other developers understand the purpose and usage of this property.
+ /** + * Indicates whether the chatbot should use ChatGPT variant UI. + * This is a temporary feature for ICER 2025 paper. + * @default false + */ @Input() isChatGptWrapper = false;src/main/webapp/app/iris/exercise-chatbot/widget/chatbot-widget.component.html (1)
Line range hint
38-39
: Consider implementing a feature flag service.Since this is a temporary feature for research purposes, consider implementing a proper feature flag service (like LaunchDarkly or a custom solution) instead of using string constants. This would make it easier to:
- Control the feature rollout
- Collect metrics
- Remove the feature after the paper
- Manage future experimental features
This would also help prevent temporary code from becoming permanent technical debt.
Also applies to: 148-148
src/main/webapp/app/iris/base-chatbot/iris-base-chatbot.component.html (2)
140-145
: Reduce code duplication in logo rendering.The logo rendering logic is duplicated from the header section. Consider extracting this into a reusable component.
// Create a new component: chat-logo.component.ts @Component({ selector: 'jhi-chat-logo', template: ` @if (!isChatGptWrapper) { <jhi-iris-logo [size]="size" /> } @else { <img [src]="chatGptLogoPath" [alt]="'ChatGPT Logo'" [class]="logoClass" /> } ` }) export class ChatLogoComponent { @Input() isChatGptWrapper: boolean; @Input() size: IrisLogoSize; @Input() logoClass: string; }
Line range hint
4-206
: Consider implementing a robust feature flag system for research experiments.The current implementation uses a simple boolean flag for the ICER paper experiment. For better maintainability and future research needs, consider:
- Implementing a proper feature flag system that supports multiple experiments
- Moving all experiment-related configurations to a dedicated service
- Adding clear documentation about the lifecycle of research features
This will make it easier to:
- Manage multiple concurrent experiments
- Clean up temporary features
- Track experiment-specific metrics
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (13)
src/main/java/de/tum/cit/aet/artemis/core/config/Constants.java
(1 hunks)src/main/java/de/tum/cit/aet/artemis/exercise/web/ExerciseResource.java
(2 hunks)src/main/java/de/tum/cit/aet/artemis/iris/service/session/IrisExerciseChatSessionService.java
(2 hunks)src/main/webapp/app/app.constants.ts
(1 hunks)src/main/webapp/app/iris/base-chatbot/iris-base-chatbot.component.html
(3 hunks)src/main/webapp/app/iris/base-chatbot/iris-base-chatbot.component.scss
(1 hunks)src/main/webapp/app/iris/base-chatbot/iris-base-chatbot.component.ts
(1 hunks)src/main/webapp/app/iris/exercise-chatbot/exercise-chatbot-button.component.ts
(2 hunks)src/main/webapp/app/iris/exercise-chatbot/widget/chatbot-widget.component.html
(1 hunks)src/main/webapp/app/iris/exercise-chatbot/widget/chatbot-widget.component.ts
(2 hunks)src/main/webapp/app/overview/exercise-details/course-exercise-details.component.ts
(5 hunks)src/main/webapp/i18n/de/exerciseChatbot.json
(1 hunks)src/main/webapp/i18n/en/exerciseChatbot.json
(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- src/main/java/de/tum/cit/aet/artemis/core/config/Constants.java
🚧 Files skipped from review as they are similar to previous changes (3)
- src/main/java/de/tum/cit/aet/artemis/iris/service/session/IrisExerciseChatSessionService.java
- src/main/java/de/tum/cit/aet/artemis/exercise/web/ExerciseResource.java
- src/main/webapp/app/iris/exercise-chatbot/exercise-chatbot-button.component.ts
🧰 Additional context used
📓 Path-based instructions (7)
src/main/webapp/i18n/de/exerciseChatbot.json (1)
Pattern src/main/webapp/i18n/de/**/*.json
: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".
src/main/webapp/app/iris/exercise-chatbot/widget/chatbot-widget.component.ts (1)
src/main/webapp/app/app.constants.ts (1)
src/main/webapp/app/iris/base-chatbot/iris-base-chatbot.component.ts (1)
src/main/webapp/app/iris/exercise-chatbot/widget/chatbot-widget.component.html (1)
Pattern src/main/webapp/**/*.html
: @if and @for are new and valid Angular syntax replacing *ngIf and *ngFor. They should always be used over the old style.
src/main/webapp/app/iris/base-chatbot/iris-base-chatbot.component.html (1)
Pattern src/main/webapp/**/*.html
: @if and @for are new and valid Angular syntax replacing *ngIf and *ngFor. They should always be used over the old style.
src/main/webapp/app/overview/exercise-details/course-exercise-details.component.ts (1)
🪛 Biome (1.9.4)
src/main/webapp/app/overview/exercise-details/course-exercise-details.component.ts
[error] 231-231: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
⏰ Context from checks skipped due to timeout of 90000ms (7)
- GitHub Check: Codacy Static Code Analysis
- GitHub Check: client-tests-selected
- GitHub Check: client-tests
- GitHub Check: server-tests
- GitHub Check: Build and Push Docker Image
- GitHub Check: Analyse
- GitHub Check: Build .war artifact
🔇 Additional comments (6)
src/main/webapp/app/iris/exercise-chatbot/widget/chatbot-widget.component.ts (1)
9-9
: LGTM! Clean implementation of dialog data injection.The implementation follows Angular's dependency injection best practices for dialog data handling.
Also applies to: 22-22
src/main/webapp/app/iris/exercise-chatbot/widget/chatbot-widget.component.html (1)
4-10
: LGTM! Clean template binding implementation.The template follows Angular best practices with proper property binding and safe null handling.
src/main/webapp/app/iris/base-chatbot/iris-base-chatbot.component.scss (1)
165-191
: LGTM! The changes improve style encapsulation and margin control.The modifications enhance the component's style isolation by moving bubble styles inside the
:host
selector and provide better control over nested paragraph margins.src/main/webapp/i18n/en/exerciseChatbot.json (1)
56-56
: LGTM! The translation key follows the existing pattern.The new disclaimer message for ChatGPT maintains consistency with the existing Iris disclaimer.
src/main/webapp/i18n/de/exerciseChatbot.json (1)
56-56
: LGTM! The German translation follows the informal style guideline.The new disclaimer message for ChatGPT maintains consistency and uses the informal "du" form as required.
src/main/webapp/app/iris/base-chatbot/iris-base-chatbot.component.html (1)
202-206
: LGTM! Clean implementation of conditional disclaimer messages.The implementation correctly uses translation keys and follows the new Angular syntax guidelines.
src/main/webapp/app/overview/exercise-details/course-exercise-details.component.ts
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (3)
src/main/webapp/app/overview/exercise-details/course-exercise-details.component.ts (2)
116-116
: Consider removing the TODO comment from the injection declaration.The TODO comment in the injection declaration adds noise to the code. Since this is a temporary feature, consider moving the comment to a more appropriate location, such as the feature's implementation block.
- private accountService = inject(AccountService); // TODO TW: This "feature" is only temporary for a paper. + private accountService = inject(AccountService);
134-134
: Move the TODO comment to a documentation block.Instead of inline TODO comments, consider using a documentation block at the property declaration to better explain the temporary nature of this feature.
- isChatGptWrapper: boolean = false; // TODO TW: This "feature" is only temporary for a paper. + /** + * @temporary This feature is only for ICER 2025 Paper + * Controls whether to show the ChatGPT variant of the interface + */ + isChatGptWrapper = false;src/test/javascript/spec/component/iris/ui/chatbot-widget.component.spec.ts (1)
19-24
: Enhance mock implementations and provider configuration.While the providers are correctly defined, consider these improvements:
- Use jest.spyOn() instead of jest.fn() for better test maintainability
- Follow the NgMocks pattern consistently across all providers
providers: [ MockProvider(IrisChatService), - { provide: MatDialog, useValue: { closeAll: jest.fn() } }, + MockProvider(MatDialog, { + closeAll: jest.spyOn(jest.fn(), 'closeAll') + }), { provide: Router, useValue: { events: of() } }, { provide: MAT_DIALOG_DATA, useValue: { isChatGptWrapper: false } }, ],
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
src/main/webapp/app/iris/base-chatbot/iris-base-chatbot.component.scss
(1 hunks)src/main/webapp/app/overview/exercise-details/course-exercise-details.component.ts
(5 hunks)src/test/javascript/spec/component/iris/ui/chatbot-widget.component.spec.ts
(2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- src/main/webapp/app/iris/base-chatbot/iris-base-chatbot.component.scss
🧰 Additional context used
📓 Path-based instructions (2)
src/test/javascript/spec/component/iris/ui/chatbot-widget.component.spec.ts (1)
Pattern src/test/javascript/spec/**/*.ts
: jest: true; mock: NgMocks; bad_practices: avoid_full_module_import; perf_improvements: mock_irrelevant_deps; service_testing: mock_http_for_logic; no_schema: avoid_NO_ERRORS_SCHEMA; expectation_specificity: true; solutions: {boolean: toBeTrue/False, reference: toBe, existence: toBeNull/NotNull, undefined: toBeUndefined, class_obj: toContainEntries/toEqual, spy_calls: {not_called: not.toHaveBeenCalled, once: toHaveBeenCalledOnce, with_value: toHaveBeenCalledWith|toHaveBeenCalledExactlyOnceWith}}
src/main/webapp/app/overview/exercise-details/course-exercise-details.component.ts (1)
🪛 Biome (1.9.4)
src/main/webapp/app/overview/exercise-details/course-exercise-details.component.ts
[error] 231-231: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
⏰ Context from checks skipped due to timeout of 90000ms (8)
- GitHub Check: Codacy Static Code Analysis
- GitHub Check: server-tests
- GitHub Check: server-style
- GitHub Check: client-tests-selected
- GitHub Check: client-tests
- GitHub Check: Build and Push Docker Image
- GitHub Check: Build .war artifact
- GitHub Check: Analyse
🔇 Additional comments (5)
src/main/webapp/app/overview/exercise-details/course-exercise-details.component.ts (2)
39-39
: LGTM: Import statement follows Angular conventions.The import statement for
ICER_PAPER_FLAG
is correctly grouped with related constants.
228-234
: 🛠️ Refactor suggestionImprove the user group assignment logic.
The current implementation has several issues:
- The condition uses optional chaining incorrectly (as flagged by static analysis)
- The logic for user group assignment is not clearly documented
- The implementation might be better served by a dedicated service
Consider applying these improvements:
- // TODO TW: This "feature" is only temporary for a paper. - if (this.exercise.problemStatement?.includes(ICER_PAPER_FLAG)) { - this.accountService.identity().then((user) => { - this.isChatGptWrapper = user && user.id ? user.id % 3 == 0 : false; - }); - } + /** + * ICER 2025 Paper Feature + * Assigns users to one of three groups based on their ID: + * - Group 0 (id % 3 = 0): ChatGPT variant + * - Group 1 (id % 3 = 1): Standard Iris variant + * - Group 2 (id % 3 = 2): Control group (no AI) + */ + if (this.exercise.problemStatement?.includes(ICER_PAPER_FLAG)) { + this.accountService.identity().then((user) => { + this.isChatGptWrapper = user?.id !== undefined && user.id % 3 === 0; + }); + }Additionally, consider:
- Moving this logic to a dedicated service (e.g.,
UserGroupAssignmentService
)- Adding error handling for the promise
- Using an enum to represent the user groups
Would you like me to help create a dedicated service for managing the user group assignments?
Likely invalid or redundant comment.
🧰 Tools
🪛 Biome (1.9.4)
[error] 231-231: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
src/test/javascript/spec/component/iris/ui/chatbot-widget.component.spec.ts (3)
5-5
: LGTM!The import for MAT_DIALOG_DATA is correctly added and follows Angular Material import best practices.
Line range hint
33-83
: Add test coverage for isChatGptWrapper functionality.The test suite lacks coverage for the new isChatGptWrapper feature. Please add the following test cases:
- Component behavior when isChatGptWrapper is true
- Component's reaction to dialog data changes
- Integration with IrisBaseChatbotComponent
Example test case structure:
it('should handle isChatGptWrapper flag correctly', () => { TestBed.resetTestingModule(); TestBed.configureTestingModule({ declarations: [IrisChatbotWidgetComponent, MockComponent(IrisBaseChatbotComponent)], providers: [ MockProvider(IrisChatService), MockProvider(MatDialog), { provide: Router, useValue: { events: of() } }, { provide: MAT_DIALOG_DATA, useValue: { isChatGptWrapper: true } } ] }).compileComponents(); const fixture = TestBed.createComponent(IrisChatbotWidgetComponent); const component = fixture.componentInstance; fixture.detectChanges(); // Add expectations based on the actual component behavior expect(component.dialogData.isChatGptWrapper).toBeTrue(); });
Line range hint
1-83
: Verify the consistency of isChatGptWrapper usage across components.Let's ensure that the isChatGptWrapper flag is consistently used across all related components.
✅ Verification successful
The isChatGptWrapper implementation is consistent but temporary
The flag is properly implemented across the component hierarchy with consistent data flow and adequate test coverage. However, note that this feature is explicitly marked as temporary for a paper, as indicated by TODO comments in both the component and template.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Check for consistent usage of isChatGptWrapper across components # Check for isChatGptWrapper usage in component files echo "Checking isChatGptWrapper usage in components:" rg -l "isChatGptWrapper" "src/main/webapp/app/iris" # Check for consistent dialog data structure echo "\nChecking MAT_DIALOG_DATA usage:" ast-grep --pattern 'MAT_DIALOG_DATA' -l ts # Check for potential missing test coverage echo "\nChecking test coverage for components using isChatGptWrapper:" fd -e spec.ts$ . src/test/javascript/spec/component/irisLength of output: 1848
Script:
#!/bin/bash # Check implementation details and usage patterns # Show how isChatGptWrapper is used in component implementations echo "Implementation in chatbot-widget.component.ts:" rg -A 5 "isChatGptWrapper" "src/main/webapp/app/iris/exercise-chatbot/widget/chatbot-widget.component.ts" echo "\nImplementation in exercise-chatbot-button.component.ts:" rg -A 5 "isChatGptWrapper" "src/main/webapp/app/iris/exercise-chatbot/exercise-chatbot-button.component.ts" echo "\nImplementation in iris-base-chatbot.component.ts:" rg -A 5 "isChatGptWrapper" "src/main/webapp/app/iris/base-chatbot/iris-base-chatbot.component.ts" # Check HTML template usage echo "\nHTML usage patterns:" rg -A 2 "isChatGptWrapper" "src/main/webapp/app/iris/**/*.html"Length of output: 1694
Script:
#!/bin/bash # Check HTML template bindings echo "HTML template usage in base component:" rg -A 2 "isChatGptWrapper" "src/main/webapp/app/iris/base-chatbot/iris-base-chatbot.component.html" echo "\nHTML template usage in widget component:" rg -A 2 "isChatGptWrapper" "src/main/webapp/app/iris/exercise-chatbot/widget/chatbot-widget.component.html" echo "\nHTML template usage in button component:" rg -A 2 "isChatGptWrapper" "src/main/webapp/app/iris/exercise-chatbot/exercise-chatbot-button.component.html"Length of output: 1647
Iris
: Special hacks for ICER 2025 PaperIris
: Add a temporary ChatGPT interface for specific user groups and exercises
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While this is not the most beautiful code ;-) it should do the trick in the experiment 👍
2f2a3f9
Split users in programming exercise in three groups for the conduction of an experiment:
Checklist
General
Steps for Testing
Testserver States
Note
These badges show the state of the test servers.
Green = Currently available, Red = Currently locked
Click on the badges to get to the test servers.
Review Progress
Performance Review
Code Review
Manual Tests
Summary by CodeRabbit
New Features
Documentation
Chores