Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 0 additions & 20 deletions GPTutor-Backend/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,6 @@
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.546</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>6.0.10</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
Expand All @@ -36,21 +31,6 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>6.0.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,20 @@

@RestController
public class ConversationController {
@Autowired
ConversationsService conversationsService;
private final ConversationsService conversationsService;

public ConversationController(ConversationsService conversationsService) {
this.conversationsService = conversationsService;
}

@PostMapping(path = "/vk-doc/conversation")
public String getConversationVkDoc(@RequestBody QuestionRequest questionRequest) {
return conversationsService.getConversationVKDoc(questionRequest);
}

@PostMapping(path = "/conversation", consumes = MediaType.APPLICATION_JSON_VALUE)
public <T> T getConversation(@RequestBody ConversationRequest conversationRequest, HttpServletRequest request) throws IOException {
return (T) conversationsService.getConversation(conversationRequest, (String) request.getAttribute("vkUserId"));
public Object getConversation(@RequestBody ConversationRequest conversationRequest, HttpServletRequest request) throws IOException {
return conversationsService.getConversation(conversationRequest, (String) request.getAttribute("vkUserId"));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@

@RestController
public class HistoryController {
private final HistoryService historyService;
private final MessageRepository messageRepository;

@Autowired
HistoryService historyService;

@Autowired
MessageRepository messageRepository;
public HistoryController(HistoryService historyService, MessageRepository messageRepository) {
this.historyService = historyService;
this.messageRepository = messageRepository;
}

@PostMapping(path = "/history")
@RateLimiter(name = "historyLimit", fallbackMethod = "fallbackMethod")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,15 @@

@RestController
public class ImagesController {
@Autowired
ImagesService imagesService;

@Autowired
ComplaintsService complaintsService;

@Autowired
ImageLikeService imageLikeService;
private final ImagesService imagesService;
private final ComplaintsService complaintsService;
private final ImageLikeService imageLikeService;

public ImagesController(ImagesService imagesService, ComplaintsService complaintsService, ImageLikeService imageLikeService) {
this.imagesService = imagesService;
this.complaintsService = complaintsService;
this.imageLikeService = imageLikeService;
}

@PostMapping(path = "/image")
List<Image> generateImage(@RequestBody GenerateImageRequest prompt, HttpServletRequest request) {
Expand Down
74 changes: 47 additions & 27 deletions GPTutor-Frontend/src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
import React, { useEffect } from "react";
import { retrieveLaunchParams } from "@telegram-apps/sdk";
import { useLocation } from "@happysanta/router";
import {
useAdaptivity,
useAppearance,
useInsets,
} from "@vkontakte/vk-bridge-react";
import {
AdaptivityProvider,
AppRoot,
Expand All @@ -11,70 +18,83 @@ import bridge, {
AppearanceType,
parseURLSearchParamsForGetLaunchParams,
} from "@vkontakte/vk-bridge";
import { useLocation } from "@happysanta/router";
import {
useAdaptivity,
useAppearance,
useInsets,
} from "@vkontakte/vk-bridge-react";
import "markdown-it-latex/dist/index.css";

// Styles
import "markdown-it-latex/dist/index.css";
import "@vkontakte/vkui/dist/vkui.css";
import "./index.css";

// Core entities and services
import { vkUserModel } from "./entity/user";
import { online } from "./api/online";
import { appService } from "$/services/AppService";
import { transformVKBridgeAdaptivity } from "$/utility/strings";

// Theme components
import { OneDark } from "./OneDark";
import { OneLight } from "./OneLight";

// Routing
import { Modals, Panels, Views } from "./entity/routing";

// Navigation and utilities
import { useNavigationContext } from "./NavigationContext";
import { SnackbarNotifier } from "./components/SnackbarNotifier";
import UtilBlock from "./UtilBlock";

// Main panels
import { Home } from "./panels/Home";
import { Chapters } from "./panels/Chapters";
import { History } from "./panels/History";
import { Modes } from "./panels/Modes";

import { useNavigationContext } from "./NavigationContext";
import { SnackbarNotifier } from "./components/SnackbarNotifier";
import { ChatSettings } from "./panels/ChatSettings";
import { ApplicationInfo } from "./modals/ApplicationInfo";
import { LoadingPanel } from "$/panels/LoadingPanel";

// Chat panels
import { ChatFree } from "./panels/ChatFree";
import { ChatLesson } from "./panels/ChatLesson";
import { ChatInterview } from "./panels/ChatInterview";
import { InterviewQuestions } from "./modals/InterviewQuestions";
import { LeetcodeProblems } from "./panels/LeetCodeProblems";
import { ChatLeetCode } from "./panels/ChatLeetCode";
import { ChatTrainer } from "./panels/ChatTrainer";

// LeetCode panels
import { LeetcodeProblems } from "./panels/LeetCodeProblems";
import { ProblemDetail } from "./panels/ProblemDetail";
import { AppAlert } from "./modals/AppAlert";

// Code editor
import { CodeEditor } from "./panels/CodeEditor";
import { ChatTrainer } from "./panels/ChatTrainer";
import { ImageGenerationResult } from "./panels/ImageGenerationResult";
import UtilBlock from "./UtilBlock";

import { appService } from "$/services/AppService";
import { LoadingPanel } from "$/panels/LoadingPanel";
// Image generation panels
import { ImageGeneration } from "$/panels/ImageGeneration";
import { ImageGenerationResult } from "./panels/ImageGenerationResult";
import { ImageGenerationExamples } from "$/panels/ImageGenerationExamples";
import Gallery from "$/panels/Gallery";
import ImageCreatePrompts from "$/panels/ImageCreatePrompts";
import Profile from "$/panels/Profile";
import ApplicationInfoStableArt from "./modals/ApplicationInfoStableArt/ApplicationInfoStableArt";
import { PublishingImages } from "$/panels/PublishingImages";
import { Agreement } from "$/modals/Agreement";
import { DetailImage } from "$/modals/DetailImage";
import { WeakRequestModal } from "$/modals/WeakRequestModal";

// Profile panels
import Profile from "$/panels/Profile";
import { GPTutorProfile } from "$/panels/GPTutorProfile";
import { transformVKBridgeAdaptivity } from "$/utility/strings";

// Other feature panels
import { MermaidPage } from "$/panels/MermaidPage";
import { AdditionalRequests } from "$/panels/AdditionalRequests";
import { AnecdoteMain } from "$/panels/AnecdoteMain";
import AnecdoteGeneration from "./panels/AnecdoteGeneration/AnecdoteGeneration";
import { AnecdoteNews } from "$/panels/AnecdoteNews";
import ApplicationInfoHumor from "./modals/ApplicationInfoHumor/ApplicationInfoHumor";
import { BingPanel } from "$/panels/BingPanel";
import VKDocQuestionPanel from "./panels/VKDocQuestionPanel/VKDocQestionPanel";
import { VkDocQuestionRequest } from "$/panels/VkDocQuestionRequest";
import { retrieveLaunchParams } from "@telegram-apps/sdk";

// Modals
import { ApplicationInfo } from "./modals/ApplicationInfo";
import ApplicationInfoStableArt from "./modals/ApplicationInfoStableArt/ApplicationInfoStableArt";
import ApplicationInfoHumor from "./modals/ApplicationInfoHumor/ApplicationInfoHumor";
import { InterviewQuestions } from "./modals/InterviewQuestions";
import { Agreement } from "$/modals/Agreement";
import { DetailImage } from "$/modals/DetailImage";
import { WeakRequestModal } from "$/modals/WeakRequestModal";
import { AppAlert } from "./modals/AppAlert";

const App = () => {
const location = useLocation();
Expand Down
89 changes: 60 additions & 29 deletions GPTutor-Models/app.py
Original file line number Diff line number Diff line change
@@ -1,49 +1,38 @@
from flask import Flask, request
from flask import Flask, request, jsonify
import logging
import traceback

from images.dalle3 import generate_dalle
from images.prodia import txt2img
from vk_docs.index import create_question_vk_doc

app = Flask(__name__)
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


@app.post('/llm')
def llm_post():
return None
return jsonify({"message": "LLM POST endpoint not implemented"}), 501


@app.get('/llm')
def llm_get():
return []
return jsonify([])


@app.post("/image")
def image():
return txt2img(
prompt=request.json["prompt"],
model=request.json["modelId"],
negative_prompt=request.json["negativePrompt"],
scheduler=request.json["scheduler"],
guidance_scale=request.json["guidanceScale"],
seed=request.json["seed"],
steps=request.json["numInferenceSteps"],
)


@app.post("/vk-doc-question")
def vk_doc_question():
return create_question_vk_doc(
question=request.json["question"],
source=request.json["source"]
)


@app.post("/dalle")
def dalle():
print(request.json)

try:
return txt2img(
if not request.json:
return jsonify({"error": "JSON payload required"}), 400

required_fields = ["prompt", "modelId", "negativePrompt", "scheduler", "guidanceScale", "seed", "numInferenceSteps"]
for field in required_fields:
if field not in request.json:
return jsonify({"error": f"Missing required field: {field}"}), 400

result = txt2img(
prompt=request.json["prompt"],
model=request.json["modelId"],
negative_prompt=request.json["negativePrompt"],
Expand All @@ -52,10 +41,47 @@ def dalle():
seed=request.json["seed"],
steps=request.json["numInferenceSteps"],
)
return jsonify(result)
except Exception as e:
logger.error(f"Error in image generation: {str(e)}")
logger.error(traceback.format_exc())
return jsonify({"error": "Image generation failed"}), 500


@app.post("/vk-doc-question")
def vk_doc_question():
try:
if not request.json:
return jsonify({"error": "JSON payload required"}), 400

if "question" not in request.json or "source" not in request.json:
return jsonify({"error": "Missing required fields: question, source"}), 400

result = create_question_vk_doc(
question=request.json["question"],
source=request.json["source"]
)
return jsonify(result)
except Exception as e:
print(e)
return txt2img(
logger.error(f"Error in VK doc question: {str(e)}")
logger.error(traceback.format_exc())
return jsonify({"error": "VK doc question processing failed"}), 500


@app.post("/dalle")
def dalle():
try:
if not request.json:
return jsonify({"error": "JSON payload required"}), 400

logger.info(f"DALLE request: {request.json}")

required_fields = ["prompt", "modelId", "negativePrompt", "scheduler", "guidanceScale", "seed", "numInferenceSteps"]
for field in required_fields:
if field not in request.json:
return jsonify({"error": f"Missing required field: {field}"}), 400

result = txt2img(
prompt=request.json["prompt"],
model=request.json["modelId"],
negative_prompt=request.json["negativePrompt"],
Expand All @@ -64,6 +90,11 @@ def dalle():
seed=request.json["seed"],
steps=request.json["numInferenceSteps"],
)
return jsonify(result)
except Exception as e:
logger.error(f"Error in DALLE generation: {str(e)}")
logger.error(traceback.format_exc())
return jsonify({"error": "DALLE generation failed"}), 500


def run_flask():
Expand Down
Loading