Skip to content

Syllabus bot for programs #2273

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

Merged
merged 13 commits into from
Jun 3, 2025
Merged

Conversation

shanbady
Copy link
Contributor

@shanbady shanbady commented May 30, 2025

What are the relevant tickets?

Closes https://github.com/mitodl/hq/issues/7330
related PR: mitodl/learn-ai#206

Description (What does it do?)

This PR does the following:

  1. enables the Syllabus bot for programs (if feature flag for syllabus bot is enabled)
  2. Allows for the syllabus bot to search the content files of courses within a program when/if needed

This PR and associated learn-ai pr adds "child courses" in the api response for learning resources which is then used to let the syllabus bot know the readable ids for courses within a program. We introduce a separate tool with annotations letting the bot know that it should use the "related course search" if we have a list of related readable ids.

How can this be tested?

  1. checkout this branch in this repo as well as in learn-ai
  2. make sure NEXT_PUBLIC_LEARN_AI_SYLLABUS_ENDPOINT is set to your local learn-ai instance
  3. enable settings.AI_DEBUG in learn-ai
  4. ensure you have some programs loaded up locally
  5. manually set the feature flag for enabling syllabus bot to true in frontends/main/src/page-components/LearningResourceExpanded/LearningResourceExpanded.tsx:
   const chatEnabled =
-    useFeatureFlagEnabled(FeatureFlags.LrDrawerChatbot) &&
+    true &&
     (resource?.resource_type === ResourceTypeEnum.Course ||
       resource?.resource_type === ResourceTypeEnum.Program)
  1. find a program and open up it's resource drawer - you should be able to use askTim
  2. open up developer tools and inspect the requests to /http/syllabus_agent/ - when asking questions you should see an array of related/child courses being passed through.
  3. Look at the debug info of the responses.
    • when asking about general program information, you should see that the bot passes just a single resource id to the vector endpoint: "search_parameters": {"q": "Downstream Processing course materials", "resource_readable_id":"program-xyz"]}
    • When asking about information specific to the courses within the program, you should see a list of resource readable ids passed in: "search_parameters": {"q": "Downstream Processing course materials", "resource_readable_id": ["45c76489-d061-42e1-ab26-3eb5ad7a2297", "d73c1cd1-c965-47b6-8b6e-b6b6e2816d0e”]}

Additional Context

My initial pass at this tried to always pass an array for all searches: readable_id:[program-readable-id, child-course-id, child-course-id2] - this however led to some ambiguity isssues where if you ask "what is the name of this program" it would surface the name of a course within the program etc. To work around that - if its a program related question, just pass program id. anything related to specifics of a course in the program, pass the array of courses.

Checklist:

  • go through testing steps.
  • Try different questions about just the program at a high level and questions specific to a particular course within the program. make sure bot appropriately passes the single program id vs list of course ids based on the question.
  • make sure the responses are correct and that there are no strange edge cases when asking for course specific info

Copy link

OpenAPI Changes

Show/hide 184 changes: 0 error, 0 warning, 184 info
184 changes: 0 error, 0 warning, 184 info
info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/courses/
		added the required property 'results/items/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/courses/{id}/
		added the required property 'children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/
		added the required property 'results/items/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/
		added the required property 'children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{id}/
		added the required property 'children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{id}/
		added the required property 'children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcast_episodes/
		added the required property 'results/items/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcast_episodes/{id}/
		added the required property 'children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/
		added the required property 'results/items/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{id}/
		added the required property 'children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/programs/
		added the required property 'results/items/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/programs/{id}/
		added the required property 'children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/
		added the required property 'results/items/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{id}/
		added the required property 'children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/videos/
		added the required property 'results/items/children' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/videos/{id}/
		added the required property 'children' to the response with the '200' status


Unexpected changes? Ensure your branch is up-to-date with main (consider rebasing).

@shanbady shanbady added Needs Review An open Pull Request that is ready for review and removed Work in Progress labels May 31, 2025
@shanbady shanbady marked this pull request as ready for review May 31, 2025 03:27
@mbertrand mbertrand self-assigned this Jun 3, 2025
Copy link
Member

@mbertrand mbertrand left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Something I noticed in initial testing, will keep trying it out:

Question 1: What is this program about?
Query 1: "resource_readable_id": ["course-v1:MITxT+14.100x", "course-v1:MITxT+14.310x", "course-v1:MITxT+JPAL102x", "course-v1:MITxT+14.009x", "course-v1:MITxT+14.003x"]
Response 1: The program is part of the MITx MicroMasters in Data, Economics, and Design of Policy (DEDP). This program offers....

Question 2: What are all the courses I need to take for this program?
Query 2: "resource_readable_id": ["course-v1:MITxT+14.100x", "course-v1:MITxT+14.310x", "course-v1:MITxT+JPAL102x", "course-v1:MITxT+14.009x", "course-v1:MITxT+14.003x", "course-v1:MITxT+14.100x", "course-v1:MITxT+14.310x", "course-v1:MITxT+JPAL102x", "course-v1:MITxT+14.009x", "course-v1:MITxT+14.003x"]
Response 3: "How can I assist you further with the MITx MicroMasters program in Data, Economics, and Design of Policy (DEDP)?"

Question 3: What are all the courses I need to take for this program? <same as before, since last response was not good - maybe summarization kicked off to cause that, will check later>
Query 3: "resource_readable_id": "program-v1:MITx+DEDP-Public-Policy"
Response 3:

The MITx MicroMasters program in Data, Economics, and Design of Policy (DEDP) requires you to complete the following courses:

Core Courses (Complete all):
Microeconomics - Starts May 13, 2025
Designing and Running Randomized Evaluations - Starts September 9, 2025
Data Analysis for Social Scientists - Starts May 13, 2025
Elective Courses (Public Policy Track):
Good Economics for Hard Times - Starts May 13, 2025
Microeconomic Theory and Public Policy - Starts May 13, 2025

@mbertrand
Copy link
Member

Tried the same initial questions in a new private tab and this time it gave a good response to the required courses question on the first try, so maybe the initial attempt was just a fluke:

The MITx MicroMasters Program in Data, Economics, and Design of Policy (DEDP) consists of a series of online courses and proctored exams. To earn the MicroMasters credential, learners must pass three core classes and two elective courses. The program is designed to equip learners with skills in data analysis, microeconomics, development economics, and the design and evaluation of social policies. It is co-designed by MIT's Department of Economics and the Abdul Latif Jameel Poverty Action Lab (J-PAL).

The program includes both core and elective courses, and learners must complete the required courses and corresponding proctored exams to earn the credential. For more detailed information about the specific courses and structure, you can visit the MITx MicroMasters portal.

@mbertrand
Copy link
Member

fwiw, the summarization code as currently written can eventually causes issues when multiple tool calls are made at once, there is a fix for that in my current learn-ai PR.

@mbertrand
Copy link
Member

More followup questions after the initial good response to the required courses question:

Question: What are the 3 core classes?
Query: "resource_readable_id": "program-v1:MITx+DEDP-Public-Policy" (I'm guessing it may be extracting a decent answer from the previous query results instead of the results from this search).
Response: "The three core classes for the MITx MicroMasters in Data, Economics, and Design of Policy are: .....etc"

Question: How is the "data analysis for social scientists" course graded?
Query: "resource_readable_id": "program-v1:MITx+DEDP-Public-Policy" (would have expected the data analysis course id to be included too)
Response: "I couldn't find specific information about the grading scheme for the "Data Analysis for Social Scientists" course. You might want to check the course details on the MITx MicroMasters portal or contact their support for more precise information."

Copy link
Member

@mbertrand mbertrand left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, 👍

The related learn-ai pr should give better responses with the summarization responses from mitodl/learn-ai#205 applied there.

@shanbady shanbady merged commit 43ada22 into main Jun 3, 2025
13 checks passed
@shanbady shanbady deleted the shanbady/programs-include-child-resources branch June 3, 2025 15:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Needs Review An open Pull Request that is ready for review
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants