47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
import uuid
|
|
|
|
from app.configs.constants import GPTModels, TemperatureSettings
|
|
from app.helpers import ExercisesHelper
|
|
from app.services.abc import ILLMService
|
|
|
|
|
|
class IdeaMatch:
|
|
|
|
def __init__(self, llm: ILLMService):
|
|
self._llm = llm
|
|
|
|
async def gen_idea_match_exercise(self, text: str, quantity: int, start_id: int):
|
|
messages = [
|
|
{
|
|
"role": "system",
|
|
"content": (
|
|
'You are a helpful assistant designed to output JSON on this format: '
|
|
'{"ideas": [ '
|
|
'{"idea": "some idea or opinion", "from": "person, institution whose idea or opinion this is"}, '
|
|
'{"idea": "some other idea or opinion", "from": "person, institution whose idea or opinion this is"}'
|
|
']}'
|
|
)
|
|
},
|
|
{
|
|
"role": "user",
|
|
"content": (
|
|
f'From the text extract {quantity} ideas, theories, opinions and who they are from. '
|
|
f'The text: {text}'
|
|
)
|
|
}
|
|
]
|
|
|
|
response = await self._llm.prediction(
|
|
GPTModels.GPT_4_O, messages, ["ideas"], TemperatureSettings.GEN_QUESTION_TEMPERATURE
|
|
)
|
|
ideas = response["ideas"]
|
|
|
|
return {
|
|
"id": str(uuid.uuid4()),
|
|
"allowRepetition": False,
|
|
"options": ExercisesHelper.build_options(ideas),
|
|
"prompt": "Choose the correct author for the ideas/opinions from the list of authors below.",
|
|
"sentences": ExercisesHelper.build_sentences(ideas, start_id),
|
|
"type": "matchSentences"
|
|
}
|