urimai.storage¶
.. py:module:: urimai.storage
.. py:module:: urimai.storage.metadata_store
Metadata storage using SQLite.
.. py:class:: MetadataStore(db_path=None) :module: urimai.storage.metadata_store
Bases: :py:class:object
Manages metadata storage in SQLite database.
.. py:method:: MetadataStore.initialize() :module: urimai.storage.metadata_store :async:
Create database tables if they don't exist.
:rtype: :sphinx_autodoc_typehints_type:`\:py\:obj\:\`None\``
.. py:method:: MetadataStore.add_database(db_info) :module: urimai.storage.metadata_store :async:
Add a new database to the store.
:type db_info: :sphinx_autodoc_typehints_type:`\:py\:class\:\`\~urimai.storage.models.DatabaseInfo\``
:param db_info: Database information
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`int\``
:returns: ID of the inserted database
:raises sqlite3.IntegrityError: If database name already exists
.. py:method:: MetadataStore.get_database(name) :module: urimai.storage.metadata_store :async:
Get database by name.
:type name: :sphinx_autodoc_typehints_type:`\:py\:class\:\`str\``
:param name: Database name
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`\~urimai.storage.models.DatabaseInfo\` \| \:py\:obj\:\`None\``
:returns: DatabaseInfo if found, None otherwise
.. py:method:: MetadataStore.list_databases() :module: urimai.storage.metadata_store :async:
List all registered databases.
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`list\`\\ \\\[\:py\:class\:\`\~urimai.storage.models.DatabaseInfo\`\]`
:returns: List of DatabaseInfo objects
.. py:method:: MetadataStore.update_last_synced(database_id) :module: urimai.storage.metadata_store :async:
Update last_synced_at timestamp for a database.
:type database_id: :sphinx_autodoc_typehints_type:`\:py\:class\:\`int\``
:param database_id: Database ID
:rtype: :sphinx_autodoc_typehints_type:`\:py\:obj\:\`None\``
.. py:method:: MetadataStore.update_database_context(database_id, context) :module: urimai.storage.metadata_store :async:
Update the persisted database context.
:type database_id: :sphinx_autodoc_typehints_type:`\:py\:class\:\`int\``
:param database_id: Database ID
:type context: :sphinx_autodoc_typehints_type:`\:py\:class\:\`dict\`\\ \\\[\:py\:class\:\`str\`\, \:py\:data\:\`\~typing.Any\`\]`
:param context: DatabaseContext dict to persist
:rtype: :sphinx_autodoc_typehints_type:`\:py\:obj\:\`None\``
.. py:method:: MetadataStore.delete_database(name) :module: urimai.storage.metadata_store :async:
Delete a database and all its schemas.
:type name: :sphinx_autodoc_typehints_type:`\:py\:class\:\`str\``
:param name: Database name
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`bool\``
:returns: True if deleted, False if not found
.. py:method:: MetadataStore.add_schema(schema_info) :module: urimai.storage.metadata_store :async:
Add schema metadata for a table.
:type schema_info: :sphinx_autodoc_typehints_type:`\:py\:class\:\`\~urimai.storage.models.SchemaInfo\``
:param schema_info: Schema information
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`int\``
:returns: ID of the inserted schema
.. py:method:: MetadataStore.get_schemas(database_id) :module: urimai.storage.metadata_store :async:
Get all schemas for a database.
:type database_id: :sphinx_autodoc_typehints_type:`\:py\:class\:\`int\``
:param database_id: Database ID
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`list\`\\ \\\[\:py\:class\:\`\~urimai.storage.models.SchemaInfo\`\]`
:returns: List of SchemaInfo objects
.. py:method:: MetadataStore.update_enriched_metadata(database_id, table_name, enriched_metadata) :module: urimai.storage.metadata_store :async:
Update enriched metadata for a table.
:type database_id: :sphinx_autodoc_typehints_type:`\:py\:class\:\`int\``
:param database_id: Database ID
:type table_name: :sphinx_autodoc_typehints_type:`\:py\:class\:\`str\``
:param table_name: Table name
:type enriched_metadata: :sphinx_autodoc_typehints_type:`\:py\:class\:\`dict\`\\ \\\[\:py\:class\:\`str\`\, \:py\:data\:\`\~typing.Any\`\]`
:param enriched_metadata: Enriched metadata dictionary
:rtype: :sphinx_autodoc_typehints_type:`\:py\:obj\:\`None\``
.. py:method:: MetadataStore.delete_schemas(database_id) :module: urimai.storage.metadata_store :async:
Delete all schemas for a database.
:type database_id: :sphinx_autodoc_typehints_type:`\:py\:class\:\`int\``
:param database_id: Database ID
:rtype: :sphinx_autodoc_typehints_type:`\:py\:obj\:\`None\``
.. py:method:: MetadataStore.get_setting(key, default=None) :module: urimai.storage.metadata_store :async:
Get a setting value.
:type key: :sphinx_autodoc_typehints_type:`\:py\:class\:\`str\``
:param key: Setting key
:type default: :sphinx_autodoc_typehints_type:`\:py\:class\:\`str\` \| \:py\:obj\:\`None\``
:param default: Default value if not found
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`str\` \| \:py\:obj\:\`None\``
:returns: Setting value or default
.. py:method:: MetadataStore.set_setting(key, value) :module: urimai.storage.metadata_store :async:
Set a setting value.
:type key: :sphinx_autodoc_typehints_type:`\:py\:class\:\`str\``
:param key: Setting key
:type value: :sphinx_autodoc_typehints_type:`\:py\:class\:\`str\``
:param value: Setting value
:rtype: :sphinx_autodoc_typehints_type:`\:py\:obj\:\`None\``
.. py:method:: MetadataStore.list_settings() :module: urimai.storage.metadata_store :async:
List all settings.
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`list\`\\ \\\[\:py\:class\:\`\~urimai.storage.models.SettingInfo\`\]`
:returns: List of SettingInfo objects
.. py:method:: MetadataStore.save_table_profile(profile) :module: urimai.storage.metadata_store :async:
Save or update a table profile.
:type profile: :sphinx_autodoc_typehints_type:`\:py\:class\:\`\~urimai.storage.models.TableProfile\``
:param profile: TableProfile object
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`int\``
:returns: ID of the inserted/updated profile
.. py:method:: MetadataStore.get_table_profile(database_id, table_name) :module: urimai.storage.metadata_store :async:
Get table profile by database ID and table name.
:type database_id: :sphinx_autodoc_typehints_type:`\:py\:class\:\`int\``
:param database_id: Database ID
:type table_name: :sphinx_autodoc_typehints_type:`\:py\:class\:\`str\``
:param table_name: Table name
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`\~urimai.storage.models.TableProfile\` \| \:py\:obj\:\`None\``
:returns: TableProfile if found, None otherwise
.. py:method:: MetadataStore.list_table_profiles(database_id) :module: urimai.storage.metadata_store :async:
List all table profiles for a database.
:type database_id: :sphinx_autodoc_typehints_type:`\:py\:class\:\`int\``
:param database_id: Database ID
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`list\`\\ \\\[\:py\:class\:\`\~urimai.storage.models.TableProfile\`\]`
:returns: List of TableProfile objects
.. py:method:: MetadataStore.save_quality_report(report) :module: urimai.storage.metadata_store :async:
Save or update a quality report.
:type report: :sphinx_autodoc_typehints_type:`\:py\:class\:\`\~urimai.storage.models.QualityReport\``
:param report: QualityReport object
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`int\``
:returns: ID of the inserted/updated report
.. py:method:: MetadataStore.get_quality_report(database_id, table_name) :module: urimai.storage.metadata_store :async:
Get quality report by database ID and table name.
:type database_id: :sphinx_autodoc_typehints_type:`\:py\:class\:\`int\``
:param database_id: Database ID
:type table_name: :sphinx_autodoc_typehints_type:`\:py\:class\:\`str\``
:param table_name: Table name
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`\~urimai.storage.models.QualityReport\` \| \:py\:obj\:\`None\``
:returns: QualityReport if found, None otherwise
.. py:method:: MetadataStore.save_insights_report(report) :module: urimai.storage.metadata_store :async:
Save or update an insights report.
:type report: :sphinx_autodoc_typehints_type:`\:py\:class\:\`\~urimai.storage.models.InsightsReport\``
:param report: InsightsReport object
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`int\``
:returns: ID of the inserted/updated report
.. py:method:: MetadataStore.get_insights_report(database_id, table_name) :module: urimai.storage.metadata_store :async:
Get insights report by database ID and table name.
:type database_id: :sphinx_autodoc_typehints_type:`\:py\:class\:\`int\``
:param database_id: Database ID
:type table_name: :sphinx_autodoc_typehints_type:`\:py\:class\:\`str\``
:param table_name: Table name
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`\~urimai.storage.models.InsightsReport\` \| \:py\:obj\:\`None\``
:returns: InsightsReport if found, None otherwise
.. py:module:: urimai.storage.models
Pydantic models for storage and agent responses.
.. py:class:: DatabaseInfo(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Information about a registered database.
.. py:attribute:: DatabaseInfo.id :module: urimai.storage.models :type: int | None
.. py:attribute:: DatabaseInfo.name :module: urimai.storage.models :type: str
.. py:attribute:: DatabaseInfo.path :module: urimai.storage.models :type: str
.. py:attribute:: DatabaseInfo.database_context :module: urimai.storage.models :type: dict[str, ~typing.Any] | None
.. py:attribute:: DatabaseInfo.created_at :module: urimai.storage.models :type: str
.. py:attribute:: DatabaseInfo.last_synced_at :module: urimai.storage.models :type: str
.. py:attribute:: DatabaseInfo.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: SchemaInfo(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Schema metadata for a table.
.. py:attribute:: SchemaInfo.id :module: urimai.storage.models :type: int | None
.. py:attribute:: SchemaInfo.database_id :module: urimai.storage.models :type: int
.. py:attribute:: SchemaInfo.table_name :module: urimai.storage.models :type: str
.. py:attribute:: SchemaInfo.original_metadata :module: urimai.storage.models :type: dict[str, ~typing.Any]
.. py:attribute:: SchemaInfo.enriched_metadata :module: urimai.storage.models :type: dict[str, ~typing.Any] | None
.. py:attribute:: SchemaInfo.sample_data :module: urimai.storage.models :type: list[dict[str, ~typing.Any]]
.. py:attribute:: SchemaInfo.created_at :module: urimai.storage.models :type: str
.. py:attribute:: SchemaInfo.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: SettingInfo(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Application setting.
.. py:attribute:: SettingInfo.key :module: urimai.storage.models :type: str
.. py:attribute:: SettingInfo.value :module: urimai.storage.models :type: str
.. py:attribute:: SettingInfo.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: ColumnDescription(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Description of a single column.
.. py:attribute:: ColumnDescription.column_name :module: urimai.storage.models :type: str
.. py:attribute:: ColumnDescription.description :module: urimai.storage.models :type: str
.. py:attribute:: ColumnDescription.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: EnrichedSchema(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Enriched schema description generated by LLM.
.. py:attribute:: EnrichedSchema.table_name :module: urimai.storage.models :type: str
.. py:attribute:: EnrichedSchema.table_purpose :module: urimai.storage.models :type: str
.. py:attribute:: EnrichedSchema.column_descriptions :module: urimai.storage.models :type: list[~urimai.storage.models.ColumnDescription]
.. py:attribute:: EnrichedSchema.relationships :module: urimai.storage.models :type: list[str]
.. py:attribute:: EnrichedSchema.business_context :module: urimai.storage.models :type: str | None
.. py:method:: EnrichedSchema.to_storage_dict() :module: urimai.storage.models
Convert to storage format (column_descriptions as dict).
:rtype: :sphinx_autodoc_typehints_type:`\:py\:class\:\`dict\``
.. py:attribute:: EnrichedSchema.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: ConversationalResponse(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Simple conversational message response.
.. py:attribute:: ConversationalResponse.message :module: urimai.storage.models :type: str
.. py:attribute:: ConversationalResponse.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: QuestionAnalysis(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Analysis of user’s question.
.. py:attribute:: QuestionAnalysis.intent :module: urimai.storage.models :type: str
.. py:attribute:: QuestionAnalysis.relevant_tables :module: urimai.storage.models :type: list[str]
.. py:attribute:: QuestionAnalysis.requires_join :module: urimai.storage.models :type: bool
.. py:attribute:: QuestionAnalysis.complexity :module: urimai.storage.models :type: str
.. py:attribute:: QuestionAnalysis.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: QueryPlan(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Generated SQL query plan.
.. py:attribute:: QueryPlan.sql_query :module: urimai.storage.models :type: str
.. py:attribute:: QueryPlan.explanation :module: urimai.storage.models :type: str
.. py:attribute:: QueryPlan.tables_used :module: urimai.storage.models :type: list[str]
.. py:attribute:: QueryPlan.estimated_rows :module: urimai.storage.models :type: int | None
.. py:attribute:: QueryPlan.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: SuccessAnswer(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Successful query result with answer.
.. py:attribute:: SuccessAnswer.success :module: urimai.storage.models :type: bool
.. py:attribute:: SuccessAnswer.answer :module: urimai.storage.models :type: str
.. py:attribute:: SuccessAnswer.confidence :module: urimai.storage.models :type: float
.. py:attribute:: SuccessAnswer.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: RetryWithFeedback(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Indicates query needs to be retried with modifications.
.. py:attribute:: RetryWithFeedback.success :module: urimai.storage.models :type: bool
.. py:attribute:: RetryWithFeedback.retry_reason :module: urimai.storage.models :type: str
.. py:attribute:: RetryWithFeedback.suggested_fix :module: urimai.storage.models :type: str
.. py:attribute:: RetryWithFeedback.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: QueryComplexity(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Result of complexity classification.
.. py:attribute:: QueryComplexity.is_complex :module: urimai.storage.models :type: bool
.. py:attribute:: QueryComplexity.reasoning :module: urimai.storage.models :type: str
.. py:attribute:: QueryComplexity.estimated_steps :module: urimai.storage.models :type: int
.. py:attribute:: QueryComplexity.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: SubProblem(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
A single sub-problem in a query execution plan.
.. py:attribute:: SubProblem.id :module: urimai.storage.models :type: str
.. py:attribute:: SubProblem.title :module: urimai.storage.models :type: str
.. py:attribute:: SubProblem.purpose :module: urimai.storage.models :type: str
.. py:attribute:: SubProblem.approach :module: urimai.storage.models :type: str
.. py:attribute:: SubProblem.tables_needed :module: urimai.storage.models :type: list[str]
.. py:attribute:: SubProblem.depends_on :module: urimai.storage.models :type: list[str]
.. py:attribute:: SubProblem.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: ExecutionPlan(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Multi-step execution plan for a complex question.
.. py:attribute:: ExecutionPlan.question :module: urimai.storage.models :type: str
.. py:attribute:: ExecutionPlan.approach_summary :module: urimai.storage.models :type: str
.. py:attribute:: ExecutionPlan.sub_problems :module: urimai.storage.models :type: list[~urimai.storage.models.SubProblem]
.. py:attribute:: ExecutionPlan.final_assembly_strategy :module: urimai.storage.models :type: str
.. py:attribute:: ExecutionPlan.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: SubProblemResult(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Result of executing a single sub-problem.
.. py:attribute:: SubProblemResult.sub_problem_id :module: urimai.storage.models :type: str
.. py:attribute:: SubProblemResult.sql_query :module: urimai.storage.models :type: str
.. py:attribute:: SubProblemResult.success :module: urimai.storage.models :type: bool
.. py:attribute:: SubProblemResult.data_summary :module: urimai.storage.models :type: str
.. py:attribute:: SubProblemResult.row_count :module: urimai.storage.models :type: int
.. py:attribute:: SubProblemResult.key_findings :module: urimai.storage.models :type: list[str]
.. py:attribute:: SubProblemResult.verified_columns :module: urimai.storage.models :type: dict[str, str]
.. py:attribute:: SubProblemResult.verified_joins :module: urimai.storage.models :type: list[str]
.. py:attribute:: SubProblemResult.sample_data :module: urimai.storage.models :type: list[dict[str, ~typing.Any]] | None
.. py:attribute:: SubProblemResult.error :module: urimai.storage.models :type: str | None
.. py:attribute:: SubProblemResult.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: PlanRevision(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Revised plan after a sub-problem failure or unexpected result.
.. py:attribute:: PlanRevision.should_revise :module: urimai.storage.models :type: bool
.. py:attribute:: PlanRevision.reason :module: urimai.storage.models :type: str
.. py:attribute:: PlanRevision.updated_sub_problems :module: urimai.storage.models :type: list[~urimai.storage.models.SubProblem]
.. py:attribute:: PlanRevision.drop_ids :module: urimai.storage.models :type: list[str]
.. py:attribute:: PlanRevision.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: ColumnProfile(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Statistical profile for a single column.
.. py:attribute:: ColumnProfile.column_name :module: urimai.storage.models :type: str
.. py:attribute:: ColumnProfile.data_type :module: urimai.storage.models :type: str
.. py:attribute:: ColumnProfile.row_count :module: urimai.storage.models :type: int
.. py:attribute:: ColumnProfile.null_count :module: urimai.storage.models :type: int
.. py:attribute:: ColumnProfile.null_percentage :module: urimai.storage.models :type: float
.. py:attribute:: ColumnProfile.distinct_count :module: urimai.storage.models :type: int
.. py:attribute:: ColumnProfile.distinct_percentage :module: urimai.storage.models :type: float
.. py:attribute:: ColumnProfile.min_value :module: urimai.storage.models :type: float | None
.. py:attribute:: ColumnProfile.max_value :module: urimai.storage.models :type: float | None
.. py:attribute:: ColumnProfile.mean :module: urimai.storage.models :type: float | None
.. py:attribute:: ColumnProfile.median :module: urimai.storage.models :type: float | None
.. py:attribute:: ColumnProfile.std_dev :module: urimai.storage.models :type: float | None
.. py:attribute:: ColumnProfile.q1 :module: urimai.storage.models :type: float | None
.. py:attribute:: ColumnProfile.q3 :module: urimai.storage.models :type: float | None
.. py:attribute:: ColumnProfile.skewness :module: urimai.storage.models :type: float | None
.. py:attribute:: ColumnProfile.kurtosis :module: urimai.storage.models :type: float | None
.. py:attribute:: ColumnProfile.min_length :module: urimai.storage.models :type: int | None
.. py:attribute:: ColumnProfile.max_length :module: urimai.storage.models :type: int | None
.. py:attribute:: ColumnProfile.avg_length :module: urimai.storage.models :type: float | None
.. py:attribute:: ColumnProfile.top_values :module: urimai.storage.models :type: list[tuple[~typing.Any, int]]
.. py:attribute:: ColumnProfile.inferred_role :module: urimai.storage.models :type: str | None
.. py:attribute:: ColumnProfile.role_confidence :module: urimai.storage.models :type: float | None
.. py:attribute:: ColumnProfile.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: TableProfile(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Complete profile for a table.
.. py:attribute:: TableProfile.id :module: urimai.storage.models :type: int | None
.. py:attribute:: TableProfile.database_id :module: urimai.storage.models :type: int
.. py:attribute:: TableProfile.table_name :module: urimai.storage.models :type: str
.. py:attribute:: TableProfile.row_count :module: urimai.storage.models :type: int
.. py:attribute:: TableProfile.column_count :module: urimai.storage.models :type: int
.. py:attribute:: TableProfile.columns :module: urimai.storage.models :type: list[~urimai.storage.models.ColumnProfile]
.. py:attribute:: TableProfile.created_at :module: urimai.storage.models :type: str
.. py:attribute:: TableProfile.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: QualityIssue(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
A single data quality issue detected.
.. py:attribute:: QualityIssue.severity :module: urimai.storage.models :type: ~typing.Literal[‘critical’, ‘warning’, ‘info’]
.. py:attribute:: QualityIssue.category :module: urimai.storage.models :type: str
.. py:attribute:: QualityIssue.column_name :module: urimai.storage.models :type: str | None
.. py:attribute:: QualityIssue.issue :module: urimai.storage.models :type: str
.. py:attribute:: QualityIssue.affected_rows :module: urimai.storage.models :type: int | None
.. py:attribute:: QualityIssue.recommendation :module: urimai.storage.models :type: str
.. py:attribute:: QualityIssue.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: QualityReport(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Data quality assessment report for a table.
.. py:attribute:: QualityReport.id :module: urimai.storage.models :type: int | None
.. py:attribute:: QualityReport.database_id :module: urimai.storage.models :type: int
.. py:attribute:: QualityReport.table_name :module: urimai.storage.models :type: str
.. py:attribute:: QualityReport.overall_score :module: urimai.storage.models :type: float
.. py:attribute:: QualityReport.completeness_score :module: urimai.storage.models :type: float
.. py:attribute:: QualityReport.uniqueness_score :module: urimai.storage.models :type: float
.. py:attribute:: QualityReport.validity_score :module: urimai.storage.models :type: float
.. py:attribute:: QualityReport.consistency_score :module: urimai.storage.models :type: float
.. py:attribute:: QualityReport.issues :module: urimai.storage.models :type: list[~urimai.storage.models.QualityIssue]
.. py:attribute:: QualityReport.created_at :module: urimai.storage.models :type: str
.. py:attribute:: QualityReport.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: Insight(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
A single actionable insight about the data.
.. py:attribute:: Insight.category :module: urimai.storage.models :type: str
.. py:attribute:: Insight.title :module: urimai.storage.models :type: str
.. py:attribute:: Insight.description :module: urimai.storage.models :type: str
.. py:attribute:: Insight.severity :module: urimai.storage.models :type: ~typing.Literal[‘high’, ‘medium’, ‘low’]
.. py:attribute:: Insight.affected_columns :module: urimai.storage.models :type: list[str]
.. py:attribute:: Insight.supporting_data :module: urimai.storage.models :type: dict[str, ~typing.Any]
.. py:attribute:: Insight.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: InsightsReport(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Collection of insights for a table.
.. py:attribute:: InsightsReport.id :module: urimai.storage.models :type: int | None
.. py:attribute:: InsightsReport.database_id :module: urimai.storage.models :type: int
.. py:attribute:: InsightsReport.table_name :module: urimai.storage.models :type: str
.. py:attribute:: InsightsReport.insights :module: urimai.storage.models :type: list[~urimai.storage.models.Insight]
.. py:attribute:: InsightsReport.summary :module: urimai.storage.models :type: str
.. py:attribute:: InsightsReport.created_at :module: urimai.storage.models :type: str
.. py:attribute:: InsightsReport.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].
.. py:class:: UsageStats(**data) :module: urimai.storage.models
Bases: :py:class:~pydantic.main.BaseModel
Accumulated token usage across agent calls for a single question.
.. py:attribute:: UsageStats.input_tokens :module: urimai.storage.models :type: int
.. py:attribute:: UsageStats.output_tokens :module: urimai.storage.models :type: int
.. py:attribute:: UsageStats.requests :module: urimai.storage.models :type: int
.. py:property:: UsageStats.total_tokens :module: urimai.storage.models :type: int
.. py:method:: UsageStats.add(usage) :module: urimai.storage.models
Add usage from a pydantic_ai RunUsage object.
:rtype: :sphinx_autodoc_typehints_type:`\:py\:obj\:\`None\``
.. py:attribute:: UsageStats.model_config :module: urimai.storage.models :type: ~typing.ClassVar[~pydantic.config.ConfigDict] :value: {}
Configuration for the model, should be a dictionary conforming to [`ConfigDict`][pydantic.config.ConfigDict].