From 6a40cb8225334dc506b8cecd8efbb305cdd7bcc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=BB=D0=B5=D0=B1=20=D0=9D=D0=B8=D0=BA=D0=B8=D1=88?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Mon, 25 May 2026 22:25:52 +0000 Subject: [PATCH] add main.py --- main.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 main.py diff --git a/main.py b/main.py new file mode 100644 index 0000000..95e2058 --- /dev/null +++ b/main.py @@ -0,0 +1,55 @@ +import os +from pydantic import BaseModel, Field +from langchain_core.prompts import PromptTemplate +from langchain_openai import ChatOpenAI +from langchain_core.output_parsers import PydanticOutputParser + +class TaskCard(BaseModel): + title: str = Field(..., description="Краткое название задачи") + subject: str = Field(..., description="Предмет или область, к которой относится задача") + deadline_hint: str = Field(..., description="Краткая подсказка о сроке выполнения, например 'к пятнице'") + deliverable_type: str = Field(..., description="Тип сдачи: отчёт, код, презентация и т.п.") + grading_hints: list[str] = Field(..., description="Список критериев оценки, упомянутых в тексте") + +# Инициализация LLM +llm = ChatOpenAI( + model="openai/gpt-oss-20b:free", + base_url="https://openrouter.ai/api/v1", + api_key=os.getenv("OPENAI_API_KEY"), + temperature=0.0, +) + +parser = PydanticOutputParser(pydantic_object=TaskCard) + +prompt = PromptTemplate( + template=""" +Дан текст задания от преподавателя. Нужно извлечь из него следующую информацию: +- title: название задачи +- subject: предмет +- deadline_hint: подсказка о сроке +- deliverable_type: тип сдачи +- grading_hints: список критериев оценки + +Текст задания: {input_text} + +Выведите только JSON, соответствующий модели TaskCard. Используйте формат: +{format_instructions} +""", + input_variables=["input_text"], + partial_variables={"format_instructions": parser.get_format_instructions()}, +) + +chain = prompt | llm | parser + +if __name__ == "__main__": + # Пример входа + example_text = "Сдайте к пятнице мини-отчёт по LangChain: 2 страницы, упор на агентов. Оценка: за полноту и за пример кода." + result = chain.invoke({"input_text": example_text}) + print("Parsed object:") + print(result.model_dump()) + print("\nКраткая сводка:") + print(f"Title: {result.title}") + print(f"Subject: {result.subject}") + print(f"Deadline: {result.deadline_hint}") + print(f"Deliverable: {result.deliverable_type}") + print(f"Grading hints: {', '.join(result.grading_hints)}")