# Generated by ariadne-codegen
# Source: ../../src/graphql/schema.graphql

from typing import Any, Optional

from pydantic import Field

from .base_model import BaseModel
from .enums import (
    CaseStudySourceType,
    DietStyle,
    EvidenceRefType,
    ExperienceLevel,
    GoalType,
    PreferredFormat,
    ProtocolCategory,
    ProtocolStepItemType,
    ProtocolTimeOfDay,
    SavedEntityType,
    SaveSource,
    TimeBudget,
    UserGoalType,
    UserProtocolStatus,
    UserProvider,
    UserRole,
)


class ProtocolStepItemInput(BaseModel):
    type: ProtocolStepItemType
    ref_id: Optional[str] = Field(alias="refId", default=None)
    name_override: Optional[str] = Field(alias="nameOverride", default=None)
    dosage: Optional[str] = None
    timing: Optional[str] = None
    notes: Optional[str] = None


class CursorPageInput(BaseModel):
    """Cursor pagination input (matches your usage: first + after)"""

    first: int
    after: Optional[str] = None


class ProtocolStepGroupInput(BaseModel):
    label: Optional[str] = None
    time_of_day: Optional[ProtocolTimeOfDay] = Field(alias="timeOfDay", default=None)
    items: list["ProtocolStepItemInput"]


class EvidenceRefInput(BaseModel):
    type: EvidenceRefType
    ref_id: Optional[str] = Field(alias="refId", default=None)
    label: Optional[str] = None
    url: Optional[str] = None
    episode_id: Optional[str] = Field(alias="episodeId", default=None)
    timestamps: Optional[list[int]] = None
    notes: Optional[str] = None


class SafetyBucketInput(BaseModel):
    warnings: Optional[list[str]] = None
    contraindications: Optional[list[str]] = None
    interactions: Optional[list[str]] = None
    notes: Optional[str] = None


class CreateUserProtocolInput(BaseModel):
    title: str
    goal_type: Optional[UserGoalType] = Field(alias="goalType", default=None)
    status: Optional[UserProtocolStatus] = None
    source_protocol_id: Optional[str] = Field(alias="sourceProtocolId", default=None)
    steps_structured: Optional[list["ProtocolStepGroupInput"]] = Field(
        alias="stepsStructured", default=None
    )
    evidence_refs: Optional[list["EvidenceRefInput"]] = Field(
        alias="evidenceRefs", default=None
    )
    safety: Optional["SafetyBucketInput"] = None


class UpdateUserProtocolInput(BaseModel):
    id: str
    title: Optional[str] = None
    goal_type: Optional[UserGoalType] = Field(alias="goalType", default=None)
    status: Optional[UserProtocolStatus] = None
    steps_structured: Optional[list["ProtocolStepGroupInput"]] = Field(
        alias="stepsStructured", default=None
    )
    evidence_refs: Optional[list["EvidenceRefInput"]] = Field(
        alias="evidenceRefs", default=None
    )
    safety: Optional["SafetyBucketInput"] = None


class UserGoalInput(BaseModel):
    goal_type: GoalType = Field(alias="goalType")
    priority: int
    notes: Optional[str] = None


class EntityPreferencesInput(BaseModel):
    liked_entity_ids: Optional[list[str]] = Field(alias="likedEntityIds", default=None)
    hidden_entity_ids: Optional[list[str]] = Field(
        alias="hiddenEntityIds", default=None
    )
    blocked_entity_ids: Optional[list[str]] = Field(
        alias="blockedEntityIds", default=None
    )


class UserProfileUpsertInput(BaseModel):
    user_id: str = Field(alias="userId")
    goals: Optional[list["UserGoalInput"]] = None
    experience_level: Optional[ExperienceLevel] = Field(
        alias="experienceLevel", default=None
    )
    diet_style: Optional[DietStyle] = Field(alias="dietStyle", default=None)
    avoidances: Optional[list[str]] = None
    time_budget: Optional[TimeBudget] = Field(alias="timeBudget", default=None)
    preferred_formats: Optional[list[PreferredFormat]] = Field(
        alias="preferredFormats", default=None
    )
    topic_interests: Optional[list[str]] = Field(alias="topicInterests", default=None)
    entity_preferences: Optional["EntityPreferencesInput"] = Field(
        alias="entityPreferences", default=None
    )


class MediaLinkInput(BaseModel):
    url: str
    description: str
    poster_url: Optional[str] = Field(alias="posterUrl", default=None)


class UserUpsertInput(BaseModel):
    user_id: Optional[str] = Field(alias="userId", default=None)
    email: str
    password: Optional[str] = None
    provider: Optional[UserProvider] = None
    provider_id: Optional[str] = Field(alias="providerId", default=None)
    name: Optional[str] = None
    role: Optional[UserRole] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )


class UserCreateInput(BaseModel):
    email: str
    password: Optional[str] = None
    provider: Optional[UserProvider] = None
    provider_id: Optional[str] = Field(alias="providerId", default=None)
    name: Optional[str] = None
    role: Optional[UserRole] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )


class BusinessCreateRelationsInput(BaseModel):
    name: str
    description: Optional[str] = None
    biography: Optional[str] = None
    website: Optional[str] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )
    owner_ids: Optional[list[str]] = Field(alias="ownerIds", default=None)
    product_ids: Optional[list[str]] = Field(alias="productIds", default=None)
    sponsor_episode_ids: Optional[list[str]] = Field(
        alias="sponsorEpisodeIds", default=None
    )
    owners_nested: Optional[list["BusinessOwnerNestedInput"]] = Field(
        alias="ownersNested", default=None
    )
    executives_nested: Optional[list["BusinessExecutiveNestedInput"]] = Field(
        alias="executivesNested", default=None
    )
    products_nested: Optional[list["BusinessProductNestedInput"]] = Field(
        alias="productsNested", default=None
    )
    sponsor_episodes_nested: Optional[list["BusinessEpisodeNestedInput"]] = Field(
        alias="sponsorEpisodesNested", default=None
    )
    executives: Optional[list["BusinessExecutiveRelationInput"]] = None


class BusinessUpdateWithIdsInput(BaseModel):
    id: str
    name: Optional[str] = None
    description: Optional[str] = None
    website: Optional[str] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )
    owner_ids: Optional[list[str]] = Field(alias="ownerIds", default=None)
    product_ids: Optional[list[str]] = Field(alias="productIds", default=None)
    sponsor_episode_ids: Optional[list[str]] = Field(
        alias="sponsorEpisodeIds", default=None
    )


class BusinessOwnerNestedInput(BaseModel):
    id: Optional[str] = None
    name: Optional[str] = None
    role: Optional[str] = None
    bio: Optional[str] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )


class BusinessProductNestedInput(BaseModel):
    id: Optional[str] = None
    name: Optional[str] = None
    description: Optional[str] = None
    ingredients: Optional[list[str]] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )
    source_url: Optional[str] = Field(alias="sourceUrl", default=None)


class BusinessExecutiveRelationInput(BaseModel):
    person_id: str = Field(alias="personId")
    title: Optional[str] = None
    role: Optional[str] = None


class SponsorLinkObjectInput(BaseModel):
    text: Optional[str] = None
    links: Optional[list[str]] = None
    has_code_dave: Optional[bool] = Field(alias="hasCodeDave", default=None)
    code: Optional[str] = None
    brand: Optional[str] = None
    discount_percent: Optional[float] = Field(alias="discountPercent", default=None)


class WebPageTimelineInput(BaseModel):
    from_: str = Field(alias="from")
    to: str
    title: Optional[str] = None
    description: Optional[str] = None


class BusinessEpisodeNestedInput(BaseModel):
    id: Optional[str] = None
    channel_name: str = Field(alias="channelName")
    episode_number: Optional[int] = Field(alias="episodeNumber", default=None)
    episode_page_url: str = Field(alias="episodePageUrl")
    episode_title: Optional[str] = Field(alias="episodeTitle", default=None)
    published_at: Optional[Any] = Field(alias="publishedAt", default=None)
    summary_short: Optional[str] = Field(alias="summaryShort", default=None)
    web_page_summary: Optional[str] = Field(alias="webPageSummary", default=None)
    summary_detailed: Optional[str] = Field(alias="summaryDetailed", default=None)
    youtube_video_id: Optional[str] = Field(alias="youtubeVideoId", default=None)
    youtube_watch_url: Optional[str] = Field(alias="youtubeWatchUrl", default=None)
    youtube_embed_url: Optional[str] = Field(alias="youtubeEmbedUrl", default=None)
    takeaways: Optional[list[str]] = None
    s_3_transcript_key: Optional[str] = Field(alias="s3TranscriptKey", default=None)
    s_3_transcript_url: Optional[str] = Field(alias="s3TranscriptUrl", default=None)
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )
    sponsor_link_objects: Optional[list["SponsorLinkObjectInput"]] = Field(
        alias="sponsorLinkObjects", default=None
    )
    web_page_timelines: Optional[list["WebPageTimelineInput"]] = Field(
        alias="webPageTimelines", default=None
    )


class BusinessExecutiveNestedInput(BaseModel):
    name: str
    title: str
    role: str
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )


class BusinessUpdateRelationFieldsInput(BaseModel):
    id: str
    name: Optional[str] = None
    description: Optional[str] = None
    website: Optional[str] = None
    biography: Optional[str] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )
    owner_ids: Optional[list[str]] = Field(alias="ownerIds", default=None)
    owners_nested: Optional[list["BusinessOwnerNestedInput"]] = Field(
        alias="ownersNested", default=None
    )
    product_ids: Optional[list[str]] = Field(alias="productIds", default=None)
    products_nested: Optional[list["BusinessProductNestedInput"]] = Field(
        alias="productsNested", default=None
    )
    executives: Optional[list["BusinessExecutiveRelationInput"]] = None
    executives_nested: Optional[list["BusinessExecutiveNestedInput"]] = Field(
        alias="executivesNested", default=None
    )
    sponsor_episode_ids: Optional[list[str]] = Field(
        alias="sponsorEpisodeIds", default=None
    )
    sponsor_episodes_nested: Optional[list["BusinessEpisodeNestedInput"]] = Field(
        alias="sponsorEpisodesNested", default=None
    )


class ProductCreateWithIdsInput(BaseModel):
    name: str
    business_id: str = Field(alias="businessId")
    description: Optional[str] = None
    price: Optional[float] = None
    ingredients: Optional[list[str]] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )
    source_url: Optional[str] = Field(alias="sourceUrl", default=None)
    compound_ids: Optional[list[str]] = Field(alias="compoundIds", default=None)
    protocol_ids: Optional[list[str]] = Field(alias="protocolIds", default=None)


class ProductUpdateWithIdsInput(BaseModel):
    id: str
    name: Optional[str] = None
    description: Optional[str] = None
    price: Optional[float] = None
    ingredients: Optional[list[str]] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )
    source_url: Optional[str] = Field(alias="sourceUrl", default=None)
    compound_ids: Optional[list[str]] = Field(alias="compoundIds", default=None)
    protocol_ids: Optional[list[str]] = Field(alias="protocolIds", default=None)


class ProductCompoundNestedInput(BaseModel):
    id: Optional[str] = None
    name: Optional[str] = None
    description: Optional[str] = None
    aliases: Optional[list[str]] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )


class ProductProtocolNestedInput(BaseModel):
    id: Optional[str] = None
    name: Optional[str] = None
    description: Optional[str] = None
    categories: Optional[list[ProtocolCategory]] = None
    goals: Optional[list[str]] = None
    steps: Optional[list[str]] = None
    cautions: Optional[list[str]] = None
    aliases: Optional[list[str]] = None
    source_url: Optional[str] = Field(alias="sourceUrl", default=None)


class ProductUpdateRelationFieldsInput(BaseModel):
    id: str
    compound_ids: Optional[list[str]] = Field(alias="compoundIds", default=None)
    compounds_nested: Optional[list["ProductCompoundNestedInput"]] = Field(
        alias="compoundsNested", default=None
    )
    protocol_ids: Optional[list[str]] = Field(alias="protocolIds", default=None)
    protocols_nested: Optional[list["ProductProtocolNestedInput"]] = Field(
        alias="protocolsNested", default=None
    )


class PersonCreateInput(BaseModel):
    name: str
    role: Optional[str] = None
    bio: Optional[str] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )


class PersonUpdateInput(BaseModel):
    id: str
    name: Optional[str] = None
    role: Optional[str] = None
    bio: Optional[str] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )


class EpisodeCreateWithIdsInput(BaseModel):
    channel_name: str = Field(alias="channelName")
    episode_number: Optional[int] = Field(alias="episodeNumber", default=None)
    episode_title: Optional[str] = Field(alias="episodeTitle", default=None)
    episode_page_url: str = Field(alias="episodePageUrl")
    episode_transcript_url: Optional[str] = Field(
        alias="episodeTranscriptUrl", default=None
    )
    published_at: Optional[Any] = Field(alias="publishedAt", default=None)
    summary_short: Optional[str] = Field(alias="summaryShort", default=None)
    web_page_summary: Optional[str] = Field(alias="webPageSummary", default=None)
    summary_detailed: Optional[str] = Field(alias="summaryDetailed", default=None)
    published_summary: Optional[str] = Field(alias="publishedSummary", default=None)
    youtube_video_id: Optional[str] = Field(alias="youtubeVideoId", default=None)
    youtube_watch_url: Optional[str] = Field(alias="youtubeWatchUrl", default=None)
    youtube_embed_url: Optional[str] = Field(alias="youtubeEmbedUrl", default=None)
    takeaways: Optional[list[str]] = None
    s_3_transcript_key: Optional[str] = Field(alias="s3TranscriptKey", default=None)
    s_3_transcript_url: Optional[str] = Field(alias="s3TranscriptUrl", default=None)
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )
    sponsor_link_objects: Optional[list["SponsorLinkObjectInput"]] = Field(
        alias="sponsorLinkObjects", default=None
    )
    web_page_timelines: Optional[list["WebPageTimelineInput"]] = Field(
        alias="webPageTimelines", default=None
    )
    business_links: Optional[list[str]] = Field(alias="businessLinks", default=None)
    guest_ids: Optional[list[str]] = Field(alias="guestIds", default=None)
    sponsor_business_ids: Optional[list[str]] = Field(
        alias="sponsorBusinessIds", default=None
    )
    protocol_ids: Optional[list[str]] = Field(alias="protocolIds", default=None)


class EpisodeUpdateWithIdsInput(BaseModel):
    id: str
    channel_name: Optional[str] = Field(alias="channelName", default=None)
    episode_number: Optional[int] = Field(alias="episodeNumber", default=None)
    episode_title: Optional[str] = Field(alias="episodeTitle", default=None)
    episode_page_url: Optional[str] = Field(alias="episodePageUrl", default=None)
    episode_transcript_url: Optional[str] = Field(
        alias="episodeTranscriptUrl", default=None
    )
    published_at: Optional[Any] = Field(alias="publishedAt", default=None)
    summary_short: Optional[str] = Field(alias="summaryShort", default=None)
    web_page_summary: Optional[str] = Field(alias="webPageSummary", default=None)
    summary_detailed: Optional[str] = Field(alias="summaryDetailed", default=None)
    published_summary: Optional[str] = Field(alias="publishedSummary", default=None)
    youtube_video_id: Optional[str] = Field(alias="youtubeVideoId", default=None)
    youtube_watch_url: Optional[str] = Field(alias="youtubeWatchUrl", default=None)
    youtube_embed_url: Optional[str] = Field(alias="youtubeEmbedUrl", default=None)
    takeaways: Optional[list[str]] = None
    s_3_transcript_key: Optional[str] = Field(alias="s3TranscriptKey", default=None)
    s_3_transcript_url: Optional[str] = Field(alias="s3TranscriptUrl", default=None)
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )
    sponsor_link_objects: Optional[list["SponsorLinkObjectInput"]] = Field(
        alias="sponsorLinkObjects", default=None
    )
    web_page_timelines: Optional[list["WebPageTimelineInput"]] = Field(
        alias="webPageTimelines", default=None
    )
    business_links: Optional[list[str]] = Field(alias="businessLinks", default=None)
    guest_ids: Optional[list[str]] = Field(alias="guestIds", default=None)
    sponsor_business_ids: Optional[list[str]] = Field(
        alias="sponsorBusinessIds", default=None
    )
    protocol_ids: Optional[list[str]] = Field(alias="protocolIds", default=None)


class EpisodeGuestNestedInput(BaseModel):
    id: Optional[str] = None
    name: Optional[str] = None
    role: Optional[str] = None
    bio: Optional[str] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )


class EpisodeSponsorBusinessNestedInput(BaseModel):
    id: Optional[str] = None
    name: Optional[str] = None
    description: Optional[str] = None
    website: Optional[str] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )


class EpisodeUpdateRelationFieldsInput(BaseModel):
    id: str
    guest_ids: Optional[list[str]] = Field(alias="guestIds", default=None)
    guests_nested: Optional[list["EpisodeGuestNestedInput"]] = Field(
        alias="guestsNested", default=None
    )
    sponsor_business_ids: Optional[list[str]] = Field(
        alias="sponsorBusinessIds", default=None
    )
    sponsor_businesses_nested: Optional[list["EpisodeSponsorBusinessNestedInput"]] = (
        Field(alias="sponsorBusinessesNested", default=None)
    )
    protocol_ids: Optional[list[str]] = Field(alias="protocolIds", default=None)


class ProtocolCreateWithIdsInput(BaseModel):
    name: str
    description: Optional[str] = None
    categories: Optional[list[ProtocolCategory]] = None
    goals: Optional[list[str]] = None
    steps: Optional[list[str]] = None
    cautions: Optional[list[str]] = None
    aliases: Optional[list[str]] = None
    source_url: Optional[str] = Field(alias="sourceUrl", default=None)
    product_ids: Optional[list[str]] = Field(alias="productIds", default=None)
    compound_ids: Optional[list[str]] = Field(alias="compoundIds", default=None)


class ProtocolUpdateWithIdsInput(BaseModel):
    id: str
    name: Optional[str] = None
    description: Optional[str] = None
    categories: Optional[list[ProtocolCategory]] = None
    goals: Optional[list[str]] = None
    steps: Optional[list[str]] = None
    cautions: Optional[list[str]] = None
    aliases: Optional[list[str]] = None
    source_url: Optional[str] = Field(alias="sourceUrl", default=None)
    product_ids: Optional[list[str]] = Field(alias="productIds", default=None)
    compound_ids: Optional[list[str]] = Field(alias="compoundIds", default=None)
    steps_structured: Optional[list["ProtocolStepGroupInput"]] = Field(
        alias="stepsStructured", default=None
    )
    evidence_refs: Optional[list["EvidenceRefInput"]] = Field(
        alias="evidenceRefs", default=None
    )
    safety: Optional["SafetyBucketInput"] = None
    overwrite_evidence_refs: Optional[bool] = Field(
        alias="overwriteEvidenceRefs", default=None
    )
    add_to_evidence_refs: Optional[bool] = Field(
        alias="addToEvidenceRefs", default=None
    )


class ProtocolProductNestedInput(BaseModel):
    id: Optional[str] = None
    name: Optional[str] = None
    description: Optional[str] = None
    business_id: Optional[str] = Field(alias="businessId", default=None)
    ingredients: Optional[list[str]] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )
    source_url: Optional[str] = Field(alias="sourceUrl", default=None)


class ProtocolCompoundNestedInput(BaseModel):
    id: Optional[str] = None
    name: Optional[str] = None
    description: Optional[str] = None
    aliases: Optional[list[str]] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )


class ProtocolUpdateRelationFieldsInput(BaseModel):
    id: str
    product_ids: Optional[list[str]] = Field(alias="productIds", default=None)
    products_nested: Optional[list["ProtocolProductNestedInput"]] = Field(
        alias="productsNested", default=None
    )
    compound_ids: Optional[list[str]] = Field(alias="compoundIds", default=None)
    compounds_nested: Optional[list["ProtocolCompoundNestedInput"]] = Field(
        alias="compoundsNested", default=None
    )


class CompoundCreateWithIdsInput(BaseModel):
    name: str
    description: Optional[str] = None
    aliases: Optional[list[str]] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )
    product_ids: Optional[list[str]] = Field(alias="productIds", default=None)


class CompoundUpdateWithIdsInput(BaseModel):
    id: str
    name: Optional[str] = None
    description: Optional[str] = None
    aliases: Optional[list[str]] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )
    product_ids: Optional[list[str]] = Field(alias="productIds", default=None)


class CompoundProductNestedInput(BaseModel):
    id: Optional[str] = None
    name: Optional[str] = None
    description: Optional[str] = None
    ingredients: Optional[list[str]] = None
    media_links: Optional[list["MediaLinkInput"]] = Field(
        alias="mediaLinks", default=None
    )
    source_url: Optional[str] = Field(alias="sourceUrl", default=None)


class CompoundUpdateRelationFieldsInput(BaseModel):
    id: str
    product_ids: Optional[list[str]] = Field(alias="productIds", default=None)
    products_nested: Optional[list["CompoundProductNestedInput"]] = Field(
        alias="productsNested", default=None
    )


class CaseStudyCreateWithOptionalIdsInput(BaseModel):
    title: str
    summary: str
    url: Optional[str] = None
    source_type: Optional[CaseStudySourceType] = Field(alias="sourceType", default=None)
    episode_ids: Optional[list[str]] = Field(alias="episodeIds", default=None)
    compound_ids: Optional[list[str]] = Field(alias="compoundIds", default=None)


class CaseStudyUpdateWithOptionalIdsInput(BaseModel):
    id: str
    title: Optional[str] = None
    summary: Optional[str] = None
    url: Optional[str] = None
    source_type: Optional[CaseStudySourceType] = Field(alias="sourceType", default=None)
    episode_ids: Optional[list[str]] = Field(alias="episodeIds", default=None)
    compound_ids: Optional[list[str]] = Field(alias="compoundIds", default=None)


class UserProtocolsFilterInput(BaseModel):
    """Filter input for user protocols listing"""

    status: Optional[UserProtocolStatus] = None
    goal_type: Optional[UserGoalType] = Field(alias="goalType", default=None)
    search: Optional[str] = None


class SaveEntityInput(BaseModel):
    target_type: SavedEntityType = Field(alias="targetType")
    target_id: str = Field(alias="targetId")
    note: Optional[str] = None
    tags: Optional[list[str]] = None
    pinned: Optional[bool] = None
    source: Optional[SaveSource] = None


class UnsaveEntityInput(BaseModel):
    target_type: SavedEntityType = Field(alias="targetType")
    target_id: str = Field(alias="targetId")


class SavedEntitiesFilterInput(BaseModel):
    target_type: Optional[SavedEntityType] = Field(alias="targetType", default=None)
    search: Optional[str] = None
    tags: Optional[list[str]] = None
    pinned: Optional[bool] = None


class VectorSearchArgs(BaseModel):
    query: str
    num_candidates: Optional[int] = Field(alias="numCandidates", default=None)
    limit: Optional[int] = None


ProtocolStepGroupInput.model_rebuild()
CreateUserProtocolInput.model_rebuild()
UpdateUserProtocolInput.model_rebuild()
UserProfileUpsertInput.model_rebuild()
UserUpsertInput.model_rebuild()
UserCreateInput.model_rebuild()
BusinessCreateRelationsInput.model_rebuild()
BusinessUpdateWithIdsInput.model_rebuild()
BusinessOwnerNestedInput.model_rebuild()
BusinessProductNestedInput.model_rebuild()
BusinessEpisodeNestedInput.model_rebuild()
BusinessExecutiveNestedInput.model_rebuild()
BusinessUpdateRelationFieldsInput.model_rebuild()
ProductCreateWithIdsInput.model_rebuild()
ProductUpdateWithIdsInput.model_rebuild()
ProductCompoundNestedInput.model_rebuild()
ProductUpdateRelationFieldsInput.model_rebuild()
PersonCreateInput.model_rebuild()
PersonUpdateInput.model_rebuild()
EpisodeCreateWithIdsInput.model_rebuild()
EpisodeUpdateWithIdsInput.model_rebuild()
EpisodeGuestNestedInput.model_rebuild()
EpisodeSponsorBusinessNestedInput.model_rebuild()
EpisodeUpdateRelationFieldsInput.model_rebuild()
ProtocolUpdateWithIdsInput.model_rebuild()
ProtocolProductNestedInput.model_rebuild()
ProtocolCompoundNestedInput.model_rebuild()
ProtocolUpdateRelationFieldsInput.model_rebuild()
CompoundCreateWithIdsInput.model_rebuild()
CompoundUpdateWithIdsInput.model_rebuild()
CompoundProductNestedInput.model_rebuild()
CompoundUpdateRelationFieldsInput.model_rebuild()
