commit fe1c54db65b4eb1c17bbd927c934b56c358abd7c Author: Марат Фазылов Date: Tue May 12 19:55:54 2026 +0000 add file diff --git a/main.py b/main.py new file mode 100644 index 0000000..f4a41b4 --- /dev/null +++ b/main.py @@ -0,0 +1,46 @@ +from pydantic import BaseModel, Field +from typing import List +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="Title of the assignment") + subject: str = Field(..., description="Subject or topic of the assignment") + deadline_hint: str = Field(..., description="Free‑form deadline hint") + deliverable_type: str = Field(..., description="What to submit: report, code, presentation, etc.") + grading_hints: List[str] = Field(..., description="List of grading hints mentioned in the text") + +parser = PydanticOutputParser(pydantic_object=TaskCard) + +prompt_template = ( + "You are an assistant that extracts structured information from a short assignment description. " + "Return the data in the following JSON format exactly as required by the parser. " + "Do not add any extra keys or text.\n" + "{format_instructions}\n" + "Input: {input_text}\n" + "Output:" +) + +prompt = PromptTemplate( + template=prompt_template, + input_variables=["input_text"], + partial_variables={"format_instructions": parser.get_format_instructions()}, +) + +llm = ChatOpenAI(temperature=0) + +chain = prompt | llm | parser + +if __name__ == "__main__": + # Example input + input_text = "Сдайте к пятнице мини-отчёт по LangChain: 2 страницы, упор на агентов. Оценка: за полноту и за пример кода." + result = chain.invoke({"input_text": input_text}) + print("Parsed object:") + print(result.model_dump()) + print("\nHuman readable summary:\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)}")