Skip to content

init

Backend only schemas (not used in any way by the frontend).

I.e. These can be used to work with data that is loaded from the database by a related SqlAlchemy model where it is never necessary to send the full data to the frontend. Information from these schema might be used to populate schemas that are shared with the frontend.

DatabaseSchemaType = TypeVar('DatabaseSchemaType', bound=DatabaseSchemaMixin | SchemaBase) module-attribute

NOT_LOADED = NotLoaded() module-attribute

ValidatedUTCDatetime = Annotated[datetime.datetime, AfterValidator(_assert_utc)] module-attribute

ValidatedUUID = Annotated[UUID, BeforeValidator(_make_valid_uuid)] module-attribute

__all__ = ['NOT_LOADED', 'AgentSchema', 'AssistantRunSchema', 'AssistantRunStatuses', 'AssistantSchema', 'BasicUserInfo', 'ClassChunk', 'CodeFileChunks', 'ConfigID', 'ConfigType', 'ConversationMetadataSchema', 'DatabaseSchemaMixin', 'DatabaseSchemaType', 'DecoratorChunk', 'FunctionCallSchema', 'FunctionChunk', 'FunctionResponseSchema', 'GithubMetadata', 'ImportChunk', 'LLMModels', 'MessageRoles', 'MessageSchema', 'NotLoaded', 'OptionsSchema', 'ParsedCodeFile', 'ParsedGithubFile', 'ParsedRepositoryInfo', 'ParsedTextFile', 'PurchaseSchema', 'SchemaBase', 'UpdatableProtocol', 'Update', 'UsageSchema', 'UserRoles', 'ValidatedUTCDatetime', 'ValidatedUUID', 'ensure_uuid'] module-attribute

AgentSchema

Bases: ConfigSchemaBase

agent_type = Field(default='basic', description='For differentiating structurally different Agents (e.g. different prompt structures)') class-attribute instance-attribute

options = OptionsSchema() class-attribute instance-attribute

sub_assistants = Field(default_factory=list) class-attribute instance-attribute

tools = Field(default_factory=list) class-attribute instance-attribute

AssistantRunSchema

Bases: DatabaseSchemaMixin, SchemaBase

Schema for an assistant run.

An assistant run is a user triggered run of an assistant (that could include sub-assistant runs).

assistant_id instance-attribute

contexts_used = Field(default_factory=list) class-attribute instance-attribute

conversation_uid instance-attribute

conversation_version instance-attribute

created_at = Field(default_factory=lambda: datetime.datetime.now(datetime.UTC)) class-attribute instance-attribute

current_step = 0 class-attribute instance-attribute

error_message = None class-attribute instance-attribute

finished_at = None class-attribute instance-attribute

new_instance_on_change = False class-attribute

new_messages = Field(default_factory=list) class-attribute instance-attribute

partial_info = None class-attribute instance-attribute

previous_thread_uid instance-attribute

run_index instance-attribute

status = AssistantRunStatuses.NOT_STARTED class-attribute instance-attribute

thread_uid = Field(default_factory=uuid.uuid4) class-attribute instance-attribute

user_id instance-attribute

set_ids_from_model(model)

AssistantRunStatuses

Bases: StrEnum

Enum for request statuses.

COMPLETE = 'complete' class-attribute instance-attribute

ERRORED = 'errored' class-attribute instance-attribute

NOT_STARTED = 'not_started' class-attribute instance-attribute

PARTIAL = 'in_progress' class-attribute instance-attribute

AssistantSchema

Bases: ConfigSchemaBase

agent = AgentSchema() class-attribute instance-attribute

as_tool_description = None class-attribute instance-attribute

langgraph_settings = LanggraphSettingsSchema() class-attribute instance-attribute

BasicUserInfo

Bases: SchemaBase

Minimal version of User for use with Auth state etc.

clerk_id instance-attribute

credits instance-attribute

id instance-attribute

is_admin property

roles instance-attribute

from_user(user) classmethod

ClassChunk

Bases: DatabaseSchemaMixin, SchemaBase

decorators instance-attribute

docstring instance-attribute

full_content instance-attribute

init instance-attribute

iterate_nested_schemas = True class-attribute

line_numbers instance-attribute

methods instance-attribute

name instance-attribute

new_instance_on_change = False class-attribute

signature instance-attribute

superclasses instance-attribute

as_artifact()

as_content()

CodeFileChunks

Bases: DatabaseSchemaMixin, SchemaBase

classes instance-attribute

full_content instance-attribute

functions instance-attribute

imports instance-attribute

iterate_nested_schemas = True class-attribute

language instance-attribute

new_instance_on_change = False class-attribute

num_lines instance-attribute

ConfigID

Bases: UniqueIDBase[ConfigSchemaBase]

name instance-attribute

schema_class instance-attribute

type_ instance-attribute

user_id = None class-attribute instance-attribute

__hash__()

__repr__()

copy_without_version()

equal_excluding_version_and_deletion(other)

from_meta(meta, schema_class, version, deleted) classmethod

from_schema(schema, exact_version=False) classmethod

ConfigType

Bases: StrEnum

GLOBAL = 'global' class-attribute instance-attribute

IMMUTABLE = 'immutable' class-attribute instance-attribute

NOT_SET = 'not_set' class-attribute instance-attribute

USER = 'user' class-attribute instance-attribute

ConversationMetadataSchema

Bases: DatabaseSchemaMixin, SchemaBase

assistant_runs = Field(default_factory=list) class-attribute instance-attribute

conversation_uid instance-attribute

created_at = Field(default_factory=lambda: datetime.datetime.now(datetime.UTC)) class-attribute instance-attribute

default_assistant instance-attribute

iterate_nested_schemas = False class-attribute

last_updated_at = Field(default_factory=lambda: datetime.datetime.now(datetime.UTC)) class-attribute instance-attribute

message_history = Field(default_factory=list) class-attribute instance-attribute

new_instance_on_change = True class-attribute

next_run_index = 0 class-attribute instance-attribute

pending_assistant_runs = Field(default_factory=list) class-attribute instance-attribute

sub_assistant_run_info = Field(default_factory=SubAssistantRunInfo) class-attribute instance-attribute

title instance-attribute

user_id instance-attribute

increment_version()

new(user_pk_id, title, assistant_schema) classmethod

set_initial_version()

DatabaseSchemaMixin

Bases: BaseModel

Adds methods and values for storing in database (including id, version, deleted).

deleted = Field(default=False, exclude=False, description='Whether the schema has marked as deleted') class-attribute instance-attribute

id = Field(default=None, exclude=False, description='Database ID') class-attribute instance-attribute

iterate_nested_schemas = False class-attribute

Should nested schemas (subclasses of DatabaseSchemaMixin) be iterated over for various operations. Defaults to False for efficiency. Also should be left False if the subclass handles behaviour explicitly.

new_instance_on_change = True class-attribute

Should a whole new instance be created in the database for any change (version increment) vs changing in place.

private_incremented = False class-attribute instance-attribute

version = Field(default=None, exclude=False, description='Version of the schema') class-attribute instance-attribute

determine_version_increment(other)

Increment version for any updated schemas or sub-schemas.

I.e., 'self' is the updated schema to store in the database, and 'other' is what currently exists there.

equal_to(other, keys_to_recursively_remove=None, exclude_id=True, include_version=False)

For more complex comparisons where schema1 == schema2 is not sufficient.

E.g. Trying to compare all values without metadatas or ids.

increment_version()

Increment the version number.

Mark that model has been updated since last load. If self.id is set to None (after this) a new entry will be saved in the database.

Only makes sense to do this if the schema has an ID already.

mark_deleted(apply_nested=False)

reset_ids()

Set all ids to None.

Remove all persistence ids.

reset_incremented_for_testing()

Reset the incremented flag.

Only for testing purposes (where several updates to a schema are made within a single UOW).

For normal use, there should only ever be a single update to a schema within a UOW. Allowing multiple updates in a single UOW would allow multiple simultaneous UOWs to update the same record without clashing on version (e.g. if one UOW updates once and one twice before committing, there will be no apparent clash in version).

reset_version(nested)

Set all versions to None.

set_ids_from_model(model)

Set the ID from a model instance.

Used when creating a new schema from a model instance. Only used in repository/uow methods.

Note: Modified in place because it's safer for any schemas that ARE now associated with a saved model to have their ids set to avoid future accidental duplication.

set_initial_version()

DecoratorChunk

Bases: DatabaseSchemaMixin, SchemaBase

args instance-attribute

name instance-attribute

new_instance_on_change = False class-attribute

FunctionCallSchema

Bases: SchemaBase, DatabaseSchemaMixin

args_dict property

arguments instance-attribute

call_id instance-attribute

call_repr property

index instance-attribute

name instance-attribute

__str__()

FunctionChunk

Bases: DatabaseSchemaMixin, SchemaBase

code_body instance-attribute

decorators instance-attribute

docstring instance-attribute

full_content instance-attribute

iterate_nested_schemas = True class-attribute

line_numbers instance-attribute

name instance-attribute

new_instance_on_change = False class-attribute

return_type instance-attribute

signature instance-attribute

as_artifact()

as_content()

FunctionResponseSchema

Bases: SchemaBase, DatabaseSchemaMixin

artifact = None class-attribute instance-attribute

artifact_pk_id = None class-attribute instance-attribute

artifact_tablename = None class-attribute instance-attribute

call_id instance-attribute

name instance-attribute

__str__()

GithubMetadata

Bases: DatabaseSchemaMixin, SchemaBase

branch instance-attribute

node_id instance-attribute

owner instance-attribute

path instance-attribute

repo instance-attribute

size_bytes instance-attribute

as_content()

from_repo_and_blob(repo_id, blob) classmethod

update_from_repo_id(repo_id)

ImportChunk

Bases: DatabaseSchemaMixin, SchemaBase

aliased_name instance-attribute

full_content instance-attribute

import_path instance-attribute

is_relative instance-attribute

line_numbers instance-attribute

name instance-attribute

new_instance_on_change = False class-attribute

relative_levels instance-attribute

as_artifact()

as_content()

LLMModels

Bases: SimpleNamespace

anthropic = AnthropicModels class-attribute instance-attribute

fake = FakeModels class-attribute instance-attribute

openai = OpenaiModels class-attribute instance-attribute

MessageRoles

Bases: Enum

The different roles a message can have (that are understood by openai).

ASSISTANT = 'assistant' class-attribute instance-attribute

SYSTEM = 'system' class-attribute instance-attribute

TOOL_CALL = 'tool_call' class-attribute instance-attribute

TOOL_RESPONSE = 'tool_response' class-attribute instance-attribute

USER = 'user' class-attribute instance-attribute

MessageSchema

Bases: SchemaBase, DatabaseSchemaMixin

content instance-attribute

created_at = Field(default_factory=lambda: datetime.datetime.now(datetime.UTC)) class-attribute instance-attribute

lc_id = None class-attribute instance-attribute

role instance-attribute

tool_calls = Field(default_factory=list) class-attribute instance-attribute

tool_response = None class-attribute instance-attribute

uid = Field(default_factory=uuid.uuid4) class-attribute instance-attribute

__str__()

from_lc(lc_message) classmethod

set_ids_from_model(model)

NotLoaded

Bases: BaseModel

Placeholder for a relationship that has not been loaded.

Use this as a type hint for any attributes that correspond to relationships that may not be loaded (i.e. lazy='raise' in the relationship) This is to distinguish between None compared to a relationship that does exist but just wasn't loaded for this instance.

The UNLOADED instance below should be set as the value for any unloaded relationships

OptionsSchema

Bases: ConfigSchemaBase

Schema for storing all option values in control panel.

condense_settings = CondenseSettingsSchema() class-attribute instance-attribute

context_settings = ContextSettingsSchema() class-attribute instance-attribute

llm_settings = LLMSettingsSchema() class-attribute instance-attribute

personality_settings = PersonalitySettingsSchema() class-attribute instance-attribute

ParsedCodeFile

Bases: ParsedGithubFile

clerk_owner instance-attribute

code_file_chunks instance-attribute

full_content instance-attribute

github_metadata instance-attribute

iterate_nested_schemas = True class-attribute

new_instance_on_change = False class-attribute

from_chunks_and_metadata(chunks, metadata, clerk_owner) classmethod

ParsedGithubFile

Bases: DatabaseSchemaMixin, SchemaBase, ABC

clerk_owner = Field(description="The owner of the repository (either clerk_id or 'public')") class-attribute instance-attribute

full_content = Field(description='The full content of the file.') class-attribute instance-attribute

github_metadata instance-attribute

ParsedRepositoryInfo

Bases: BaseModel

Summarize info about parsed files stored in db.

num_code_files instance-attribute

num_text_files instance-attribute

ParsedTextFile

Bases: ParsedGithubFile

clerk_owner instance-attribute

full_content instance-attribute

general_text_chunks instance-attribute

github_metadata instance-attribute

iterate_nested_schemas = True class-attribute

new_instance_on_change = False class-attribute

from_chunks_and_metadata(chunks, metadata, clerk_owner, full_content) classmethod

PurchaseSchema

Bases: DatabaseSchemaMixin, SchemaBase

checkout_uid instance-attribute

currency = None class-attribute instance-attribute

dollar_amount = None class-attribute instance-attribute

order_complete = False class-attribute instance-attribute

raw_amount = None class-attribute instance-attribute

stripe_item_id instance-attribute

SchemaBase

Bases: BaseModel, ABC

Base class for all schemas.

model_config = ConfigDict(extra='forbid') class-attribute instance-attribute

__eq__(other)

Compare by the model_dump so that excluded values are not compared.

equal_to(other, keys_to_recursively_remove=None)

For more complex comparisons where schema1 == schema2 is not sufficient.

Note 2024-05-16: Not easy to compare when some fields are not loaded. Not sure how to handle that yet.


other: The other schema to compare to
keys_to_recursively_remove: List of keys to recursively remove from the comparison before checking equality

set_not_loaded_on_unsaved(values)

Set any values that have a NotSaved annotation and are not present to NotLoaded.

UpdatableProtocol

Bases: Protocol

Protocol for an async callable that can accept updates.

Examples:

async def example_updatable(updates: list[Update]) -> None:
    print("Applying updates", updates)

__call__(updates) async

Update dataclass

Base class for updates to propagate up to Controller/Frontend/Anything else.

Subclass to add specific fields.

__init__()

UsageSchema

Bases: SchemaBase, DatabaseSchemaMixin

Pydantic model equivalent of the UsageModel.

completion_tokens instance-attribute

conversation_id instance-attribute

prompt_tokens instance-attribute

total_cost instance-attribute

total_tokens instance-attribute

__add__(other)

empty(conversation_id) classmethod

UserRoles

Bases: Enum

ADMIN = 'ADMIN' class-attribute instance-attribute

BASIC = 'BASIC' class-attribute instance-attribute

PREMIUM = 'PREMIUM' class-attribute instance-attribute

PUBLIC = 'PUBLIC' class-attribute instance-attribute

ensure_uuid(uuid_or_str)

Ensures that a UUID is returned from either a string or a UUID.

Mostly necessary because sqlite doesn't have a native UUID type so it converts UUIDs to strings on commit.

Note: loading a model still returns UUID as appropriate, it's only when accessing variables after commit/flush that is a problem Args: uuid_or_str: