SYMBOL INDEX (849 symbols across 102 files) FILE: examples/example_1_conversation_memory.py function generate_memory_md (line 23) | async def generate_memory_md(categories, output_dir): function main (line 51) | async def main(): FILE: examples/example_2_skill_extraction.py function generate_skill_md (line 25) | async def generate_skill_md( function main (line 134) | async def main(): FILE: examples/example_3_multimodal_memory.py function generate_memory_md (line 23) | async def generate_memory_md(categories, output_dir): function main (line 58) | async def main(): FILE: examples/example_4_openrouter_memory.py function generate_memory_md (line 22) | async def generate_memory_md(categories, output_dir): function main (line 46) | async def main(): FILE: examples/example_5_with_lazyllm_client.py function run_conversation_memory_demo (line 39) | async def run_conversation_memory_demo(service): function run_skill_extraction_demo (line 79) | async def run_skill_extraction_demo(service): function run_multimodal_demo (line 138) | async def run_multimodal_demo(service): function generate_markdown_output (line 190) | async def generate_markdown_output(categories, output_dir): function generate_skill_guide (line 203) | async def generate_skill_guide(skills, service, output_file): function main (line 220) | async def main(): FILE: examples/getting_started_robust.py function main (line 30) | async def main() -> None: FILE: examples/langgraph_demo.py function initialize_infrastructure (line 24) | async def initialize_infrastructure() -> MemULangGraphTools: function process_conversation (line 35) | async def process_conversation(tools: list[BaseTool], user_id: str) -> N... function process_retrieval (line 50) | async def process_retrieval(tools: list[BaseTool], user_id: str) -> None: function main (line 60) | async def main() -> None: FILE: examples/proactive/memory/local/common.py function get_memory_service (line 11) | def get_memory_service() -> MemoryService: FILE: examples/proactive/memory/local/memorize.py function dump_conversation_resource (line 13) | def dump_conversation_resource( function memorize (line 34) | def memorize(conversation_messages: list[dict[str, Any]]) -> Awaitable[d... FILE: examples/proactive/memory/local/tools.py function get_memory (line 11) | async def get_memory(args: dict[str, Any]) -> dict[str, Any]: function _get_todos (line 22) | async def _get_todos() -> str: function get_todos (line 36) | async def get_todos() -> dict[str, Any]: FILE: examples/proactive/memory/platform/memorize.py function memorize (line 13) | async def memorize(conversation_messages: list[dict[str, Any]]) -> str |... FILE: examples/proactive/memory/platform/tools.py function get_memory (line 13) | async def get_memory(args: dict[str, Any]) -> dict[str, Any]: function _get_todos (line 26) | async def _get_todos() -> str: function get_todos (line 45) | async def get_todos() -> dict[str, Any]: FILE: examples/proactive/proactive.py function trigger_memorize (line 20) | async def trigger_memorize(messages: list[dict[str, any]]) -> bool: function get_next_input (line 37) | async def get_next_input(iteration: int) -> tuple[str | None, bool]: function get_user_input (line 60) | async def get_user_input() -> tuple[str | None, bool]: function process_response (line 81) | async def process_response(client: ClaudeSDKClient) -> list[str]: function check_and_memorize (line 97) | async def check_and_memorize(conversation_messages: list[dict[str, any]]... function run_conversation_loop (line 125) | async def run_conversation_loop(client: ClaudeSDKClient) -> list[dict[st... function main (line 155) | async def main(): FILE: examples/sealos-assistant/main.py function get_llm_profiles (line 39) | def get_llm_profiles() -> dict: function lifespan (line 66) | async def lifespan(app: FastAPI): class ChatRequest (line 101) | class ChatRequest(BaseModel): class ChatResponse (line 106) | class ChatResponse(BaseModel): class MemorizeRequest (line 112) | class MemorizeRequest(BaseModel): class MemorizeResponse (line 117) | class MemorizeResponse(BaseModel): class RecallResponse (line 123) | class RecallResponse(BaseModel): function root (line 131) | async def root(): function health (line 149) | async def health(): function chat (line 158) | async def chat(request: ChatRequest): function memorize (line 220) | async def memorize(request: MemorizeRequest): function recall (line 250) | async def recall(query: str, limit: int = 5): FILE: examples/sealos_support_agent.py function print_slow (line 15) | def print_slow(text, delay=0.02): function run_rigorous_demo (line 24) | def run_rigorous_demo(): FILE: examples/test_nebius_provider.py function test_nebius_chat (line 43) | async def test_nebius_chat(): function test_nebius_embeddings (line 78) | async def test_nebius_embeddings(): function test_memu_with_nebius (line 107) | async def test_memu_with_nebius(): function main (line 195) | async def main(): FILE: src/lib.rs function hello_from_bin (line 4) | fn hello_from_bin() -> String { function _core (line 12) | fn _core(m: &Bound<'_, PyModule>) -> PyResult<()> { FILE: src/memu/__init__.py function _rust_entry (line 8) | def _rust_entry() -> str: FILE: src/memu/_core.pyi function hello_from_bin (line 1) | def hello_from_bin() -> str: ... FILE: src/memu/app/crud.py class CRUDMixin (line 23) | class CRUDMixin: method list_memory_items (line 38) | async def list_memory_items( method list_memory_categories (line 59) | async def list_memory_categories( method clear_memory (line 79) | async def clear_memory( method _build_list_memory_items_workflow (line 100) | def _build_list_memory_items_workflow(self) -> list[WorkflowStep]: method _list_list_memories_initial_keys (line 122) | def _list_list_memories_initial_keys() -> set[str]: method _build_list_memory_categories_workflow (line 129) | def _build_list_memory_categories_workflow(self) -> list[WorkflowStep]: method _build_clear_memory_workflow (line 150) | def _build_clear_memory_workflow(self) -> list[WorkflowStep]: method _list_clear_memories_initial_keys (line 188) | def _list_clear_memories_initial_keys() -> set[str]: method _normalize_where (line 195) | def _normalize_where(self, where: Mapping[str, Any] | None) -> dict[st... method _crud_list_memory_items (line 214) | def _crud_list_memory_items(self, state: WorkflowState, step_context: ... method _crud_list_memory_categories (line 221) | def _crud_list_memory_categories(self, state: WorkflowState, step_cont... method _crud_build_list_items_response (line 228) | def _crud_build_list_items_response(self, state: WorkflowState, step_c... method _crud_build_list_categories_response (line 237) | def _crud_build_list_categories_response(self, state: WorkflowState, s... method _crud_clear_memory_categories (line 246) | def _crud_clear_memory_categories(self, state: WorkflowState, step_con... method _crud_clear_memory_items (line 253) | def _crud_clear_memory_items(self, state: WorkflowState, step_context:... method _crud_clear_memory_resources (line 260) | def _crud_clear_memory_resources(self, state: WorkflowState, step_cont... method _crud_build_clear_memory_response (line 267) | def _crud_build_clear_memory_response(self, state: WorkflowState, step... method create_memory_item (line 279) | async def create_memory_item( method update_memory_item (line 317) | async def update_memory_item( method delete_memory_item (line 360) | async def delete_memory_item( method _build_create_memory_item_workflow (line 388) | def _build_create_memory_item_workflow(self) -> list[WorkflowStep]: method _list_create_memory_item_initial_keys (line 420) | def _list_create_memory_item_initial_keys() -> set[str]: method _build_update_memory_item_workflow (line 428) | def _build_update_memory_item_workflow(self) -> list[WorkflowStep]: method _list_update_memory_item_initial_keys (line 460) | def _list_update_memory_item_initial_keys() -> set[str]: method _build_delete_memory_item_workflow (line 469) | def _build_delete_memory_item_workflow(self) -> list[WorkflowStep]: method _list_delete_memory_item_initial_keys (line 500) | def _list_delete_memory_item_initial_keys() -> set[str]: method _patch_create_memory_item (line 508) | async def _patch_create_memory_item(self, state: WorkflowState, step_c... method _patch_update_memory_item (line 538) | async def _patch_update_memory_item(self, state: WorkflowState, step_c... method _patch_delete_memory_item (line 592) | async def _patch_delete_memory_item(self, state: WorkflowState, step_c... method _patch_persist_and_index (line 614) | async def _patch_persist_and_index(self, state: WorkflowState, step_co... method _patch_build_response (line 624) | def _patch_build_response(self, state: WorkflowState, step_context: An... method _map_category_names_to_ids (line 638) | def _map_category_names_to_ids(self, names: list[str], ctx: Context) -... method _patch_category_summaries (line 651) | async def _patch_category_summaries( method _build_category_patch_prompt (line 685) | def _build_category_patch_prompt( method _parse_category_patch_response (line 713) | def _parse_category_patch_response(self, response: str) -> tuple[bool,... FILE: src/memu/app/memorize.py class MemorizeMixin (line 47) | class MemorizeMixin: method memorize (line 65) | async def memorize( method _build_memorize_workflow (line 97) | def _build_memorize_workflow(self) -> list[WorkflowStep]: method _list_memorize_initial_keys (line 169) | def _list_memorize_initial_keys() -> set[str]: method _memorize_ingest_resource (line 181) | async def _memorize_ingest_resource(self, state: WorkflowState, step_c... method _memorize_preprocess_multimodal (line 186) | async def _memorize_preprocess_multimodal(self, state: WorkflowState, ... method _memorize_extract_items (line 199) | async def _memorize_extract_items(self, state: WorkflowState, step_con... method _memorize_dedupe_merge (line 229) | def _memorize_dedupe_merge(self, state: WorkflowState, step_context: A... method _memorize_categorize_items (line 234) | async def _memorize_categorize_items(self, state: WorkflowState, step_... method _memorize_persist_and_index (line 283) | async def _memorize_persist_and_index(self, state: WorkflowState, step... method _memorize_build_response (line 299) | def _memorize_build_response(self, state: WorkflowState, step_context:... method _segment_resource_url (line 327) | def _segment_resource_url(self, base_url: str, idx: int, total_segment... method _fetch_and_preprocess_resource (line 333) | async def _fetch_and_preprocess_resource( method _create_resource_with_caption (line 352) | async def _create_resource_with_caption( method _resolve_memory_types (line 387) | def _resolve_memory_types(self) -> list[MemoryType]: method _resolve_summary_prompt (line 391) | def _resolve_summary_prompt(self, modality: str, override: str | None)... method _resolve_multimodal_preprocess_prompt (line 404) | def _resolve_multimodal_preprocess_prompt(self, modality: str) -> str ... method _resolve_custom_prompt (line 410) | def _resolve_custom_prompt(prompt: str | CustomPrompt, templates: Mapp... method _generate_structured_entries (line 424) | async def _generate_structured_entries( method _generate_text_entries (line 457) | async def _generate_text_entries( method _generate_entries_for_segments (line 484) | async def _generate_entries_for_segments( method _generate_entries_from_text (line 511) | async def _generate_entries_from_text( method _parse_structured_entries (line 536) | def _parse_structured_entries( method _extract_segment_text (line 555) | def _extract_segment_text(self, lines: list[str], start_idx: int, end_... method _build_no_text_fallback (line 566) | def _build_no_text_fallback( method _build_no_result_fallback (line 572) | def _build_no_result_fallback( method _persist_memory_items (line 578) | async def _persist_memory_items( method _start_category_initialization (line 625) | def _start_category_initialization(self, ctx: Context, store: Database... method _ensure_categories_ready (line 637) | async def _ensure_categories_ready( method _initialize_categories (line 648) | async def _initialize_categories( method _category_embedding_text (line 671) | def _category_embedding_text(cat: CategoryConfig) -> str: method _map_category_names_to_ids (line 676) | def _map_category_names_to_ids(self, names: list[str], ctx: Context) -... method _preprocess_resource_url (line 689) | async def _preprocess_resource_url( method _prepare_audio_text (line 737) | async def _prepare_audio_text(self, local_path: str, text: str | None,... method _modality_requires_text (line 772) | def _modality_requires_text(self, modality: str) -> bool: method _dispatch_preprocessor (line 775) | async def _dispatch_preprocessor( method _preprocess_conversation (line 796) | async def _preprocess_conversation( method _summarize_segment (line 831) | async def _summarize_segment(self, segment_text: str, llm_client: Any ... method _preprocess_video (line 845) | async def _preprocess_video( method _preprocess_image (line 891) | async def _preprocess_image( method _preprocess_document (line 910) | async def _preprocess_document( method _preprocess_audio (line 920) | async def _preprocess_audio( method _format_categories_for_prompt (line 930) | def _format_categories_for_prompt(self, categories: list[CategoryConfi... method _add_conversation_indices (line 940) | def _add_conversation_indices(self, conversation: str) -> str: method _build_memory_type_prompt (line 965) | def _build_memory_type_prompt(self, *, memory_type: MemoryType, resour... method _build_item_ref_id (line 981) | def _build_item_ref_id(self, item_id: str) -> str: method _extract_refs_from_summaries (line 984) | def _extract_refs_from_summaries(self, summaries: dict[str, str]) -> s... method _persist_item_references (line 1001) | async def _persist_item_references( method _build_category_summary_prompt (line 1038) | def _build_category_summary_prompt( method _update_category_summaries (line 1100) | async def _update_category_summaries( method _parse_conversation_preprocess (line 1141) | def _parse_conversation_preprocess(self, raw: str) -> tuple[str | None... method _parse_multimodal_response (line 1146) | def _parse_multimodal_response(self, raw: str, content_tag: str, capti... method _parse_conversation_preprocess_with_segments (line 1173) | def _parse_conversation_preprocess_with_segments( method _extract_segments_with_fallback (line 1184) | def _extract_segments_with_fallback(self, raw: str) -> list[dict[str, ... method _segments_from_json_payload (line 1195) | def _segments_from_json_payload(self, payload: str) -> list[dict[str, ... method _segments_from_parsed_data (line 1203) | def _segments_from_parsed_data(parsed: Any) -> list[dict[str, int | st... method _extract_tag_content (line 1225) | def _extract_tag_content(raw: str, tag: str) -> str | None: method _parse_memory_type_response (line 1233) | def _parse_memory_type_response(self, raw: str) -> list[dict[str, Any]]: method _find_xml_boundaries (line 1260) | def _find_xml_boundaries(self, raw: str) -> tuple[int, int, str] | None: method _parse_memory_element (line 1273) | def _parse_memory_element(self, memory_elem: Element) -> dict[str, Any... method _parse_memory_type_response_xml (line 1290) | def _parse_memory_type_response_xml(self, raw: str) -> list[dict[str, ... FILE: src/memu/app/patch.py class PatchMixin (line 23) | class PatchMixin: method create_memory_item (line 37) | async def create_memory_item( method update_memory_item (line 75) | async def update_memory_item( method delete_memory_item (line 118) | async def delete_memory_item( method _build_create_memory_item_workflow (line 146) | def _build_create_memory_item_workflow(self) -> list[WorkflowStep]: method _list_create_memory_item_initial_keys (line 176) | def _list_create_memory_item_initial_keys() -> set[str]: method _build_update_memory_item_workflow (line 184) | def _build_update_memory_item_workflow(self) -> list[WorkflowStep]: method _list_update_memory_item_initial_keys (line 214) | def _list_update_memory_item_initial_keys() -> set[str]: method _build_delete_memory_item_workflow (line 223) | def _build_delete_memory_item_workflow(self) -> list[WorkflowStep]: method _list_delete_memory_item_initial_keys (line 253) | def _list_delete_memory_item_initial_keys() -> set[str]: method _patch_create_memory_item (line 261) | async def _patch_create_memory_item(self, state: WorkflowState, step_c... method _patch_update_memory_item (line 291) | async def _patch_update_memory_item(self, state: WorkflowState, step_c... method _patch_delete_memory_item (line 345) | async def _patch_delete_memory_item(self, state: WorkflowState, step_c... method _patch_persist_and_index (line 367) | async def _patch_persist_and_index(self, state: WorkflowState, step_co... method _patch_build_response (line 377) | def _patch_build_response(self, state: WorkflowState, step_context: An... method _map_category_names_to_ids (line 391) | def _map_category_names_to_ids(self, names: list[str], ctx: Context) -... method _patch_category_summaries (line 404) | async def _patch_category_summaries( method _build_category_patch_prompt (line 438) | def _build_category_patch_prompt( method _parse_category_patch_response (line 466) | def _parse_category_patch_response(self, response: str) -> tuple[bool,... FILE: src/memu/app/retrieve.py class RetrieveMixin (line 27) | class RetrieveMixin: method retrieve (line 42) | async def retrieve( method _normalize_where (line 87) | def _normalize_where(self, where: Mapping[str, Any] | None) -> dict[st... method _build_rag_retrieve_workflow (line 106) | def _build_rag_retrieve_workflow(self) -> list[WorkflowStep]: method _list_retrieve_initial_keys (line 212) | def _list_retrieve_initial_keys(self) -> set[str]: method _rag_route_intention (line 228) | async def _rag_route_intention(self, state: WorkflowState, step_contex... method _rag_route_category (line 260) | async def _rag_route_category(self, state: WorkflowState, step_context... method _rag_category_sufficiency (line 288) | async def _rag_category_sufficiency(self, state: WorkflowState, step_c... method _extract_referenced_item_ids (line 324) | def _extract_referenced_item_ids(self, state: WorkflowState) -> set[str]: method _rag_recall_items (line 346) | async def _rag_recall_items(self, state: WorkflowState, step_context: ... method _rag_item_sufficiency (line 369) | async def _rag_item_sufficiency(self, state: WorkflowState, step_conte... method _rag_recall_resources (line 400) | async def _rag_recall_resources(self, state: WorkflowState, step_conte... method _rag_build_context (line 426) | def _rag_build_context(self, state: WorkflowState, _: Any) -> Workflow... method _build_llm_retrieve_workflow (line 454) | def _build_llm_retrieve_workflow(self) -> list[WorkflowStep]: method _llm_route_intention (line 538) | async def _llm_route_intention(self, state: WorkflowState, step_contex... method _llm_route_category (line 570) | async def _llm_route_category(self, state: WorkflowState, step_context... method _llm_category_sufficiency (line 590) | async def _llm_category_sufficiency(self, state: WorkflowState, step_c... method _llm_recall_items (line 615) | async def _llm_recall_items(self, state: WorkflowState, step_context: ... method _llm_item_sufficiency (line 659) | async def _llm_item_sufficiency(self, state: WorkflowState, step_conte... method _llm_recall_resources (line 684) | async def _llm_recall_resources(self, state: WorkflowState, step_conte... method _llm_build_context (line 708) | def _llm_build_context(self, state: WorkflowState, _: Any) -> Workflow... method _rank_categories_by_summary (line 725) | async def _rank_categories_by_summary( method _decide_if_retrieval_needed (line 746) | async def _decide_if_retrieval_needed( method _format_query_context (line 786) | def _format_query_context(self, queries: list[dict[str, Any]] | None) ... method _extract_query_text (line 812) | def _extract_query_text(query: dict[str, Any]) -> str: method _extract_decision (line 841) | def _extract_decision(self, raw: str) -> str: method _extract_rewritten_query (line 860) | def _extract_rewritten_query(self, raw: str) -> str | None: method _embedding_based_retrieve (line 867) | async def _embedding_based_retrieve( method _materialize_hits (line 943) | def _materialize_hits(self, hits: Sequence[tuple[str, float]], pool: d... method _format_category_content (line 954) | def _format_category_content( method _format_item_content (line 971) | def _format_item_content( method _format_resource_content (line 983) | def _format_resource_content( method _resource_caption_corpus (line 996) | def _resource_caption_corpus( method _extract_judgement (line 1006) | def _extract_judgement(self, raw: str) -> str: method _llm_based_retrieve (line 1021) | async def _llm_based_retrieve( method _format_categories_for_llm (line 1119) | def _format_categories_for_llm( method _format_items_for_llm (line 1145) | def _format_items_for_llm( method _format_resources_for_llm (line 1181) | def _format_resources_for_llm( method _llm_rank_categories (line 1216) | async def _llm_rank_categories( method _llm_rank_items (line 1241) | async def _llm_rank_items( method _llm_rank_resources (line 1280) | async def _llm_rank_resources( method _parse_llm_category_response (line 1325) | def _parse_llm_category_response( method _parse_llm_item_response (line 1349) | def _parse_llm_item_response( method _parse_llm_resource_response (line 1373) | def _parse_llm_resource_response( method _format_llm_category_content (line 1397) | def _format_llm_category_content(self, hits: list[dict[str, Any]]) -> ... method _format_llm_item_content (line 1405) | def _format_llm_item_content(self, hits: list[dict[str, Any]]) -> str: method _format_llm_resource_content (line 1412) | def _format_llm_resource_content(self, hits: list[dict[str, Any]]) -> ... FILE: src/memu/app/service.py class Context (line 42) | class Context: class MemoryService (line 49) | class MemoryService(MemorizeMixin, RetrieveMixin, CRUDMixin): method __init__ (line 50) | def __init__( method _init_llm_client (line 97) | def _init_llm_client(self, config: LLMConfig | None = None) -> Any: method _get_llm_base_client (line 137) | def _get_llm_base_client(self, profile: str | None = None) -> Any: method _llm_call_metadata (line 154) | def _llm_call_metadata(profile: str, step_context: Mapping[str, Any] |... method _wrap_llm_client (line 168) | def _wrap_llm_client( method _get_llm_client (line 187) | def _get_llm_client(self, profile: str | None = None, step_context: Ma... method llm_client (line 192) | def llm_client(self) -> Any: method workflow_runner (line 197) | def workflow_runner(self) -> WorkflowRunner: method _llm_profile_from_context (line 202) | def _llm_profile_from_context( method _get_step_llm_client (line 220) | def _get_step_llm_client(self, step_context: Mapping[str, Any] | None)... method _get_step_embedding_client (line 224) | def _get_step_embedding_client(self, step_context: Mapping[str, Any] |... method intercept_before_llm_call (line 228) | def intercept_before_llm_call( method intercept_after_llm_call (line 238) | def intercept_after_llm_call( method intercept_on_error_llm_call (line 248) | def intercept_on_error_llm_call( method intercept_before_workflow_step (line 258) | def intercept_before_workflow_step( method intercept_after_workflow_step (line 271) | def intercept_after_workflow_step( method intercept_on_error_workflow_step (line 284) | def intercept_on_error_workflow_step( method _get_context (line 297) | def _get_context(self) -> Context: method _get_database (line 300) | def _get_database(self) -> Database: method _provider_summary (line 303) | def _provider_summary(self) -> dict[str, Any]: method _register_pipelines (line 315) | def _register_pipelines(self) -> None: method _run_workflow (line 350) | async def _run_workflow(self, workflow_name: str, initial_state: Workf... method _extract_json_blob (line 363) | def _extract_json_blob(raw: str) -> str: method _escape_prompt_value (line 372) | def _escape_prompt_value(value: str) -> str: method _model_dump_without_embeddings (line 375) | def _model_dump_without_embeddings(self, obj: BaseModel) -> dict[str, ... method _validate_config (line 380) | def _validate_config( method configure_pipeline (line 390) | def configure_pipeline(self, *, step_id: str, configs: Mapping[str, An... method insert_step_after (line 394) | def insert_step_after( method insert_step_before (line 404) | def insert_step_before( method replace_step (line 414) | def replace_step( method remove_step (line 424) | def remove_step(self, *, target_step_id: str, pipeline: str = "memoriz... FILE: src/memu/app/settings.py function normalize_value (line 21) | def normalize_value(v: str) -> str: function _default_memory_types (line 30) | def _default_memory_types() -> list[str]: function _default_memory_type_prompts (line 34) | def _default_memory_type_prompts() -> "dict[str, str | CustomPrompt]": class PromptBlock (line 38) | class PromptBlock(BaseModel): class CustomPrompt (line 44) | class CustomPrompt(RootModel[dict[str, PromptBlock]]): method get (line 47) | def get(self, key: str, default: PromptBlock | None = None) -> PromptB... method items (line 50) | def items(self) -> list[tuple[str, PromptBlock]]: function complete_prompt_blocks (line 54) | def complete_prompt_blocks(prompt: CustomPrompt, default_blocks: Mapping... class CategoryConfig (line 67) | class CategoryConfig(BaseModel): function _default_memory_categories (line 74) | def _default_memory_categories() -> list[CategoryConfig]: class LazyLLMSource (line 92) | class LazyLLMSource(BaseModel): class LLMConfig (line 102) | class LLMConfig(BaseModel): method set_provider_defaults (line 129) | def set_provider_defaults(self) -> "LLMConfig": class BlobConfig (line 141) | class BlobConfig(BaseModel): class RetrieveCategoryConfig (line 146) | class RetrieveCategoryConfig(BaseModel): class RetrieveItemConfig (line 151) | class RetrieveItemConfig(BaseModel): class RetrieveResourceConfig (line 170) | class RetrieveResourceConfig(BaseModel): class RetrieveConfig (line 175) | class RetrieveConfig(BaseModel): class MemorizeConfig (line 204) | class MemorizeConfig(BaseModel): class PatchConfig (line 245) | class PatchConfig(BaseModel): class DefaultUserModel (line 249) | class DefaultUserModel(BaseModel): class UserConfig (line 256) | class UserConfig(BaseModel): class LLMProfilesConfig (line 263) | class LLMProfilesConfig(RootModel[dict[Key, LLMConfig]]): method get (line 266) | def get(self, key: str, default: LLMConfig | None = None) -> LLMConfig... method ensure_default (line 271) | def ensure_default(cls, data: Any) -> Any: method profiles (line 291) | def profiles(self) -> dict[str, LLMConfig]: method default (line 295) | def default(self) -> LLMConfig: class MetadataStoreConfig (line 299) | class MetadataStoreConfig(BaseModel): class VectorIndexConfig (line 305) | class VectorIndexConfig(BaseModel): class DatabaseConfig (line 310) | class DatabaseConfig(BaseModel): method model_post_init (line 314) | def model_post_init(self, __context: Any) -> None: FILE: src/memu/blob/local_fs.py class LocalFS (line 10) | class LocalFS: method __init__ (line 11) | def __init__(self, base_dir: str): method _get_filename_from_url (line 15) | def _get_filename_from_url(self, url: str, modality: str) -> str: method fetch (line 57) | async def fetch(self, url: str, modality: str) -> tuple[str, str | None]: FILE: src/memu/client/openai_wrapper.py class MemuChatCompletions (line 17) | class MemuChatCompletions: method __init__ (line 20) | def __init__( method _extract_user_query (line 34) | def _extract_user_query(self, messages: list[dict]) -> str: method _inject_memories (line 48) | def _inject_memories(self, messages: list[dict], memories: list[dict])... method _retrieve_memories (line 73) | async def _retrieve_memories(self, query: str) -> list[dict]: method create (line 85) | def create(self, **kwargs) -> Any: method acreate (line 110) | async def acreate(self, **kwargs) -> Any: method __getattr__ (line 125) | def __getattr__(self, name: str) -> Any: class MemuChat (line 130) | class MemuChat: method __init__ (line 133) | def __init__( method __getattr__ (line 150) | def __getattr__(self, name: str) -> Any: class MemuOpenAIWrapper (line 155) | class MemuOpenAIWrapper: method __init__ (line 179) | def __init__( method __getattr__ (line 212) | def __getattr__(self, name: str) -> Any: function wrap_openai (line 217) | def wrap_openai( FILE: src/memu/database/factory.py function build_database (line 15) | def build_database( FILE: src/memu/database/inmemory/__init__.py function build_inmemory_database (line 10) | def build_inmemory_database( FILE: src/memu/database/inmemory/models.py class InMemoryResource (line 14) | class InMemoryResource(Resource): class InMemoryMemoryItem (line 18) | class InMemoryMemoryItem(MemoryItem): class InMemoryMemoryCategory (line 22) | class InMemoryMemoryCategory(MemoryCategory): class InMemoryCategoryItem (line 26) | class InMemoryCategoryItem(CategoryItem): function build_inmemory_models (line 30) | def build_inmemory_models( FILE: src/memu/database/inmemory/repo.py class InMemoryStore (line 20) | class InMemoryStore(Database): method __init__ (line 21) | def __init__( method close (line 59) | def close(self) -> None: FILE: src/memu/database/inmemory/repositories/category_item_repo.py class InMemoryCategoryItemRepository (line 13) | class InMemoryCategoryItemRepository(CategoryItemRepo): method __init__ (line 14) | def __init__(self, *, state: InMemoryState, category_item_model: type[... method list_relations (line 19) | def list_relations(self, where: Mapping[str, Any] | None = None) -> li... method link_item_category (line 24) | def link_item_category(self, item_id: str, cat_id: str, user_data: dic... method load_existing (line 33) | def load_existing(self) -> None: method get_item_categories (line 37) | def get_item_categories(self, item_id: str) -> list[CategoryItem]: method unlink_item_category (line 41) | def unlink_item_category(self, item_id: str, cat_id: str) -> None: FILE: src/memu/database/inmemory/repositories/filter.py function matches_where (line 7) | def matches_where(obj: Any, where: Mapping[str, Any] | None) -> bool: FILE: src/memu/database/inmemory/repositories/memory_category_repo.py class InMemoryMemoryCategoryRepository (line 15) | class InMemoryMemoryCategoryRepository(MemoryCategoryRepoProtocol): method __init__ (line 16) | def __init__(self, *, state: InMemoryState, memory_category_model: typ... method list_categories (line 21) | def list_categories(self, where: Mapping[str, Any] | None = None) -> d... method clear_categories (line 26) | def clear_categories(self, where: Mapping[str, Any] | None = None) -> ... method get_or_create_category (line 35) | def get_or_create_category( method update_category (line 53) | def update_category( method load_existing (line 79) | def load_existing(self) -> None: FILE: src/memu/database/inmemory/repositories/memory_item_repo.py class InMemoryMemoryItemRepository (line 16) | class InMemoryMemoryItemRepository(MemoryItemRepo): method __init__ (line 17) | def __init__(self, *, state: InMemoryState, memory_item_model: type[Me... method list_items (line 22) | def list_items(self, where: Mapping[str, Any] | None = None) -> dict[s... method list_items_by_ref_ids (line 27) | def list_items_by_ref_ids( method clear_items (line 53) | def clear_items(self, where: Mapping[str, Any] | None = None) -> dict[... method _find_by_hash (line 62) | def _find_by_hash(self, content_hash: str, user_data: dict[str, Any]) ... method create_item (line 79) | def create_item( method create_item_reinforce (line 122) | def create_item_reinforce( method vector_search_items (line 169) | def vector_search_items( method load_existing (line 198) | def load_existing(self) -> None: method get_item (line 201) | def get_item(self, item_id: str) -> MemoryItem | None: method _parse_datetime (line 205) | def _parse_datetime(dt_str: str | None) -> pendulum.DateTime | None: method delete_item (line 219) | def delete_item(self, item_id: str) -> None: method update_item (line 224) | def update_item( FILE: src/memu/database/inmemory/repositories/resource_repo.py class InMemoryResourceRepository (line 13) | class InMemoryResourceRepository(ResourceRepoProtocol): method __init__ (line 14) | def __init__(self, *, state: InMemoryState, resource_model: type[Resou... method list_resources (line 19) | def list_resources(self, where: Mapping[str, Any] | None = None) -> di... method clear_resources (line 24) | def clear_resources(self, where: Mapping[str, Any] | None = None) -> d... method create_resource (line 33) | def create_resource( method load_existing (line 56) | def load_existing(self) -> None: FILE: src/memu/database/inmemory/vector.py function _cosine (line 11) | def _cosine(a: np.ndarray, b: np.ndarray) -> float: function salience_score (line 16) | def salience_score( function cosine_topk (line 56) | def cosine_topk( function cosine_topk_salience (line 94) | def cosine_topk_salience( function query_cosine (line 130) | def query_cosine(query_vec: list[float], vecs: list[list[float]]) -> lis... FILE: src/memu/database/interfaces.py class Database (line 13) | class Database(Protocol): method close (line 26) | def close(self) -> None: ... FILE: src/memu/database/models.py function compute_content_hash (line 15) | def compute_content_hash(summary: str, memory_type: str) -> str: class BaseRecord (line 35) | class BaseRecord(BaseModel): class ToolCallResult (line 43) | class ToolCallResult(BaseModel): method generate_hash (line 56) | def generate_hash(self) -> str: method ensure_hash (line 62) | def ensure_hash(self) -> None: class Resource (line 68) | class Resource(BaseRecord): class MemoryItem (line 76) | class MemoryItem(BaseRecord): class MemoryCategory (line 96) | class MemoryCategory(BaseRecord): class CategoryItem (line 103) | class CategoryItem(BaseRecord): function merge_scope_model (line 108) | def merge_scope_model[TBaseRecord: BaseRecord]( function build_scoped_models (line 124) | def build_scoped_models( FILE: src/memu/database/postgres/__init__.py function build_postgres_database (line 10) | def build_postgres_database( FILE: src/memu/database/postgres/migration.py function make_alembic_config (line 23) | def make_alembic_config(*, dsn: str, scope_model: type[Any]) -> AlembicC... function run_migrations (line 31) | def run_migrations(*, dsn: str, scope_model: type[Any], ddl_mode: DDLMod... FILE: src/memu/database/postgres/migrations/env.py function get_target_metadata (line 16) | def get_target_metadata() -> MetaData | None: function run_migrations_offline (line 24) | def run_migrations_offline() -> None: function run_migrations_online (line 38) | def run_migrations_online() -> None: FILE: src/memu/database/postgres/models.py class TZDateTime (line 23) | class TZDateTime(DateTime): method __init__ (line 24) | def __init__(self, timezone: bool = True, **kw: Any) -> None: class BaseModelMixin (line 28) | class BaseModelMixin(SQLModel): class ResourceModel (line 46) | class ResourceModel(BaseModelMixin, Resource): class MemoryItemModel (line 54) | class MemoryItemModel(BaseModelMixin, MemoryItem): class MemoryCategoryModel (line 63) | class MemoryCategoryModel(BaseModelMixin, MemoryCategory): class CategoryItemModel (line 70) | class CategoryItemModel(BaseModelMixin, CategoryItem): function _normalize_table_args (line 77) | def _normalize_table_args(table_args: Any) -> tuple[list[Any], dict[str,... function _merge_models (line 92) | def _merge_models( function build_table_model (line 111) | def build_table_model( function build_scoped_models (line 157) | def build_scoped_models( FILE: src/memu/database/postgres/postgres.py class PostgresStore (line 23) | class PostgresStore(Database): method __init__ (line 33) | def __init__( method close (line 101) | def close(self) -> None: method _load_existing (line 104) | def _load_existing(self) -> None: FILE: src/memu/database/postgres/repositories/base.py class PostgresRepoBase (line 15) | class PostgresRepoBase: method __init__ (line 16) | def __init__( method _scope_kwargs_from (line 31) | def _scope_kwargs_from(self, obj: Any) -> dict[str, Any]: method _normalize_embedding (line 34) | def _normalize_embedding(self, embedding: Any) -> list[float] | None: method _prepare_embedding (line 54) | def _prepare_embedding(self, embedding: list[float] | None) -> Any: method _merge_and_commit (line 59) | def _merge_and_commit(self, obj: Any) -> None: method _now (line 64) | def _now(self) -> pendulum.DateTime: method _build_filters (line 67) | def _build_filters(self, model: Any, where: Mapping[str, Any] | None) ... method _matches_where (line 89) | def _matches_where(obj: Any, where: Mapping[str, Any] | None) -> bool: FILE: src/memu/database/postgres/repositories/category_item_repo.py class PostgresCategoryItemRepo (line 13) | class PostgresCategoryItemRepo(PostgresRepoBase, CategoryItemRepo): method __init__ (line 14) | def __init__( method list_relations (line 27) | def list_relations(self, where: Mapping[str, Any] | None = None) -> li... method link_item_category (line 35) | def link_item_category(self, item_id: str, cat_id: str, user_data: dic... method unlink_item_category (line 68) | def unlink_item_category(self, item_id: str, cat_id: str) -> None: method get_item_categories (line 80) | def get_item_categories(self, item_id: str) -> list[CategoryItem]: method load_existing (line 89) | def load_existing(self) -> None: method _cache_relation (line 97) | def _cache_relation(self, rel: CategoryItem) -> CategoryItem: FILE: src/memu/database/postgres/repositories/memory_category_repo.py class PostgresMemoryCategoryRepo (line 13) | class PostgresMemoryCategoryRepo(PostgresRepoBase, MemoryCategoryRepo): method __init__ (line 14) | def __init__( method list_categories (line 27) | def list_categories(self, where: Mapping[str, Any] | None = None) -> d... method clear_categories (line 40) | def clear_categories(self, where: Mapping[str, Any] | None = None) -> ... method get_or_create_category (line 65) | def get_or_create_category( method update_category (line 111) | def update_category( method load_existing (line 148) | def load_existing(self) -> None: method _cache_category (line 157) | def _cache_category(self, cat: MemoryCategory) -> MemoryCategory: FILE: src/memu/database/postgres/repositories/memory_item_repo.py class PostgresMemoryItemRepo (line 14) | class PostgresMemoryItemRepo(PostgresRepoBase): method __init__ (line 15) | def __init__( method get_item (line 31) | def get_item(self, memory_id: str) -> MemoryItem | None: method list_items (line 43) | def list_items(self, where: Mapping[str, Any] | None = None) -> dict[s... method list_items_by_ref_ids (line 56) | def list_items_by_ref_ids( method clear_items (line 88) | def clear_items(self, where: Mapping[str, Any] | None = None) -> dict[... method create_item (line 113) | def create_item( method create_item_reinforce (line 162) | def create_item_reinforce( method update_item (line 225) | def update_item( method delete_item (line 273) | def delete_item(self, item_id: str) -> None: method vector_search_items (line 280) | def vector_search_items( method load_existing (line 310) | def load_existing(self) -> None: method _vector_search_local (line 319) | def _vector_search_local( method _salience_score (line 357) | def _salience_score( method _cache_item (line 375) | def _cache_item(self, item: MemoryItem) -> MemoryItem: method _parse_datetime (line 380) | def _parse_datetime(dt_str: str | None) -> datetime | None: method _cosine (line 396) | def _cosine(a: list[float], b: list[float]) -> float: FILE: src/memu/database/postgres/repositories/resource_repo.py class PostgresResourceRepo (line 13) | class PostgresResourceRepo(PostgresRepoBase, ResourceRepo): method __init__ (line 14) | def __init__( method list_resources (line 27) | def list_resources(self, where: Mapping[str, Any] | None = None) -> di... method clear_resources (line 40) | def clear_resources(self, where: Mapping[str, Any] | None = None) -> d... method create_resource (line 65) | def create_resource( method load_existing (line 93) | def load_existing(self) -> None: method _cache_resource (line 102) | def _cache_resource(self, res: Resource) -> Resource: FILE: src/memu/database/postgres/schema.py class SQLAModels (line 36) | class SQLAModels: function require_sqlalchemy (line 47) | def require_sqlalchemy() -> None: function get_sqlalchemy_models (line 51) | def get_sqlalchemy_models(*, scope_model: type[BaseModel] | None = None)... function get_metadata (line 104) | def get_metadata(scope_model: type[BaseModel] | None = None) -> MetaData: FILE: src/memu/database/postgres/session.py class SessionManager (line 15) | class SessionManager: method __init__ (line 18) | def __init__(self, *, dsn: str, engine_kwargs: dict[str, Any] | None =... method session (line 24) | def session(self) -> Session: method close (line 27) | def close(self) -> None: FILE: src/memu/database/repositories/category_item.py class CategoryItemRepo (line 10) | class CategoryItemRepo(Protocol): method list_relations (line 15) | def list_relations(self, where: Mapping[str, Any] | None = None) -> li... method link_item_category (line 17) | def link_item_category(self, item_id: str, cat_id: str, user_data: dic... method unlink_item_category (line 19) | def unlink_item_category(self, item_id: str, cat_id: str) -> None: ... method get_item_categories (line 21) | def get_item_categories(self, item_id: str) -> list[CategoryItem]: ... method load_existing (line 23) | def load_existing(self) -> None: ... FILE: src/memu/database/repositories/memory_category.py class MemoryCategoryRepo (line 10) | class MemoryCategoryRepo(Protocol): method list_categories (line 15) | def list_categories(self, where: Mapping[str, Any] | None = None) -> d... method clear_categories (line 17) | def clear_categories(self, where: Mapping[str, Any] | None = None) -> ... method get_or_create_category (line 19) | def get_or_create_category( method update_category (line 23) | def update_category( method load_existing (line 33) | def load_existing(self) -> None: ... FILE: src/memu/database/repositories/memory_item.py class MemoryItemRepo (line 10) | class MemoryItemRepo(Protocol): method get_item (line 15) | def get_item(self, item_id: str) -> MemoryItem | None: ... method list_items (line 17) | def list_items(self, where: Mapping[str, Any] | None = None) -> dict[s... method clear_items (line 19) | def clear_items(self, where: Mapping[str, Any] | None = None) -> dict[... method create_item (line 21) | def create_item( method update_item (line 33) | def update_item( method delete_item (line 44) | def delete_item(self, item_id: str) -> None: ... method list_items_by_ref_ids (line 46) | def list_items_by_ref_ids( method vector_search_items (line 50) | def vector_search_items( method load_existing (line 54) | def load_existing(self) -> None: ... FILE: src/memu/database/repositories/resource.py class ResourceRepo (line 10) | class ResourceRepo(Protocol): method list_resources (line 15) | def list_resources(self, where: Mapping[str, Any] | None = None) -> di... method clear_resources (line 17) | def clear_resources(self, where: Mapping[str, Any] | None = None) -> d... method create_resource (line 19) | def create_resource( method load_existing (line 30) | def load_existing(self) -> None: ... FILE: src/memu/database/sqlite/__init__.py function build_sqlite_database (line 11) | def build_sqlite_database( FILE: src/memu/database/sqlite/models.py class TZDateTime (line 21) | class TZDateTime(DateTime): method __init__ (line 24) | def __init__(self, timezone: bool = True, **kw: Any) -> None: class SQLiteBaseModelMixin (line 28) | class SQLiteBaseModelMixin(SQLModel): class SQLiteResourceModel (line 48) | class SQLiteResourceModel(SQLiteBaseModelMixin, Resource): method embedding (line 59) | def embedding(self) -> list[float] | None: method embedding (line 70) | def embedding(self, value: list[float] | None) -> None: class SQLiteMemoryItemModel (line 78) | class SQLiteMemoryItemModel(SQLiteBaseModelMixin, MemoryItem): method embedding (line 90) | def embedding(self) -> list[float] | None: method embedding (line 101) | def embedding(self, value: list[float] | None) -> None: class SQLiteMemoryCategoryModel (line 109) | class SQLiteMemoryCategoryModel(SQLiteBaseModelMixin, MemoryCategory): method embedding (line 119) | def embedding(self) -> list[float] | None: method embedding (line 130) | def embedding(self, value: list[float] | None) -> None: class SQLiteCategoryItemModel (line 138) | class SQLiteCategoryItemModel(SQLiteBaseModelMixin, CategoryItem): function _normalize_table_args (line 147) | def _normalize_table_args(table_args: Any) -> tuple[list[Any], dict[str,... function _merge_models (line 163) | def _merge_models( function build_sqlite_table_model (line 183) | def build_sqlite_table_model( FILE: src/memu/database/sqlite/repositories/base.py class SQLiteRepoBase (line 18) | class SQLiteRepoBase: method __init__ (line 21) | def __init__( method _scope_kwargs_from (line 42) | def _scope_kwargs_from(self, obj: Any) -> dict[str, Any]: method _normalize_embedding (line 46) | def _normalize_embedding(self, embedding: Any) -> list[float] | None: method _prepare_embedding (line 64) | def _prepare_embedding(self, embedding: list[float] | None) -> str | N... method _merge_and_commit (line 70) | def _merge_and_commit(self, obj: Any) -> None: method _now (line 76) | def _now(self) -> pendulum.DateTime: method _build_filters (line 80) | def _build_filters(self, model: Any, where: Mapping[str, Any] | None) ... method _matches_where (line 103) | def _matches_where(obj: Any, where: Mapping[str, Any] | None) -> bool: FILE: src/memu/database/sqlite/repositories/category_item_repo.py class SQLiteCategoryItemRepo (line 21) | class SQLiteCategoryItemRepo(SQLiteRepoBase, CategoryItemRepo): method __init__ (line 24) | def __init__( method list_relations (line 51) | def list_relations(self, where: Mapping[str, Any] | None = None) -> li... method link_item_category (line 84) | def link_item_category(self, item_id: str, category_id: str, user_data... method unlink_item_category (line 143) | def unlink_item_category(self, item_id: str, category_id: str) -> None: method get_item_categories (line 164) | def get_item_categories(self, item_id: str) -> list[CategoryItem]: method load_existing (line 175) | def load_existing(self) -> None: FILE: src/memu/database/sqlite/repositories/memory_category_repo.py class SQLiteMemoryCategoryRepo (line 21) | class SQLiteMemoryCategoryRepo(SQLiteRepoBase, MemoryCategoryRepo): method __init__ (line 24) | def __init__( method list_categories (line 51) | def list_categories(self, where: Mapping[str, Any] | None = None) -> d... method clear_categories (line 84) | def clear_categories(self, where: Mapping[str, Any] | None = None) -> ... method get_or_create_category (line 131) | def get_or_create_category( method update_category (line 196) | def update_category( method load_existing (line 255) | def load_existing(self) -> None: FILE: src/memu/database/sqlite/repositories/memory_item_repo.py class SQLiteMemoryItemRepo (line 23) | class SQLiteMemoryItemRepo(SQLiteRepoBase, MemoryItemRepo): method __init__ (line 26) | def __init__( method get_item (line 53) | def get_item(self, item_id: str) -> MemoryItem | None: method list_items (line 86) | def list_items(self, where: Mapping[str, Any] | None = None) -> dict[s... method list_items_by_ref_ids (line 119) | def list_items_by_ref_ids( method clear_items (line 164) | def clear_items(self, where: Mapping[str, Any] | None = None) -> dict[... method create_item (line 211) | def create_item( method create_item_reinforce (line 285) | def create_item_reinforce( method update_item (line 388) | def update_item( method delete_item (line 461) | def delete_item(self, item_id: str) -> None: method vector_search_items (line 477) | def vector_search_items( method _parse_datetime (line 522) | def _parse_datetime(dt_str: str | None) -> pendulum.DateTime | None: method load_existing (line 535) | def load_existing(self) -> None: FILE: src/memu/database/sqlite/repositories/resource_repo.py class SQLiteResourceRepo (line 21) | class SQLiteResourceRepo(SQLiteRepoBase, ResourceRepo): method __init__ (line 24) | def __init__( method list_resources (line 51) | def list_resources(self, where: Mapping[str, Any] | None = None) -> di... method clear_resources (line 89) | def clear_resources(self, where: Mapping[str, Any] | None = None) -> d... method create_resource (line 137) | def create_resource( method load_existing (line 190) | def load_existing(self) -> None: FILE: src/memu/database/sqlite/schema.py class SQLiteSQLAModels (line 22) | class SQLiteSQLAModels: function get_sqlite_sqlalchemy_models (line 35) | def get_sqlite_sqlalchemy_models(*, scope_model: type[BaseModel] | None ... function get_sqlite_metadata (line 92) | def get_sqlite_metadata(scope_model: type[BaseModel] | None = None) -> M... FILE: src/memu/database/sqlite/session.py class SQLiteSessionManager (line 14) | class SQLiteSessionManager: method __init__ (line 17) | def __init__(self, *, dsn: str, engine_kwargs: dict[str, Any] | None =... method session (line 31) | def session(self) -> Session: method close (line 35) | def close(self) -> None: method engine (line 43) | def engine(self) -> Any: FILE: src/memu/database/sqlite/sqlite.py class SQLiteStore (line 25) | class SQLiteStore(Database): method __init__ (line 52) | def __init__( method _create_tables (line 126) | def _create_tables(self) -> None: method close (line 133) | def close(self) -> None: method load_existing (line 137) | def load_existing(self) -> None: FILE: src/memu/database/state.py class DatabaseState (line 9) | class DatabaseState: FILE: src/memu/embedding/backends/base.py class EmbeddingBackend (line 6) | class EmbeddingBackend: method build_embedding_payload (line 12) | def build_embedding_payload(self, *, inputs: list[str], embed_model: s... method parse_embedding_response (line 15) | def parse_embedding_response(self, data: dict[str, Any]) -> list[list[... FILE: src/memu/embedding/backends/doubao.py class DoubaoMultimodalEmbeddingInput (line 8) | class DoubaoMultimodalEmbeddingInput: method __init__ (line 11) | def __init__( method to_dict (line 19) | def to_dict(self) -> dict[str, Any]: class DoubaoEmbeddingBackend (line 31) | class DoubaoEmbeddingBackend(EmbeddingBackend): method build_embedding_payload (line 38) | def build_embedding_payload(self, *, inputs: list[str], embed_model: s... method parse_embedding_response (line 42) | def parse_embedding_response(self, data: dict[str, Any]) -> list[list[... method build_multimodal_embedding_payload (line 46) | def build_multimodal_embedding_payload( method parse_multimodal_embedding_response (line 70) | def parse_multimodal_embedding_response(self, data: dict[str, Any]) ->... FILE: src/memu/embedding/backends/openai.py class OpenAIEmbeddingBackend (line 8) | class OpenAIEmbeddingBackend(EmbeddingBackend): method build_embedding_payload (line 14) | def build_embedding_payload(self, *, inputs: list[str], embed_model: s... method parse_embedding_response (line 17) | def parse_embedding_response(self, data: dict[str, Any]) -> list[list[... FILE: src/memu/embedding/http_client.py function _load_proxy (line 15) | def _load_proxy() -> str | None: class HTTPEmbeddingClient (line 27) | class HTTPEmbeddingClient: method __init__ (line 30) | def __init__( method embed (line 60) | async def embed(self, inputs: list[str]) -> list[list[float]]: method embed_multimodal (line 78) | async def embed_multimodal( method _headers (line 141) | def _headers(self) -> dict[str, str]: method _load_backend (line 144) | def _load_backend(self, provider: str) -> EmbeddingBackend: FILE: src/memu/embedding/openai_sdk.py class OpenAIEmbeddingSDKClient (line 9) | class OpenAIEmbeddingSDKClient: method __init__ (line 12) | def __init__(self, *, base_url: str, api_key: str, embed_model: str, b... method embed (line 19) | async def embed(self, inputs: list[str]) -> list[list[float]]: FILE: src/memu/integrations/langgraph.py class MemUIntegrationError (line 29) | class MemUIntegrationError(Exception): class SaveRecallInput (line 33) | class SaveRecallInput(BaseModel): class SearchRecallInput (line 41) | class SearchRecallInput(BaseModel): class MemULangGraphTools (line 53) | class MemULangGraphTools: method __init__ (line 60) | def __init__(self, memory_service: MemoryService): method tools (line 66) | def tools(self) -> list[BaseTool]: method save_memory_tool (line 73) | def save_memory_tool(self) -> StructuredTool: method search_memory_tool (line 113) | def search_memory_tool(self) -> StructuredTool: FILE: src/memu/llm/backends/base.py class LLMBackend (line 6) | class LLMBackend: method build_summary_payload (line 12) | def build_summary_payload( method parse_summary_response (line 17) | def parse_summary_response(self, data: dict[str, Any]) -> str: method build_vision_payload (line 20) | def build_vision_payload( FILE: src/memu/llm/backends/doubao.py class DoubaoLLMBackend (line 8) | class DoubaoLLMBackend(LLMBackend): method build_summary_payload (line 14) | def build_summary_payload( method parse_summary_response (line 31) | def parse_summary_response(self, data: dict[str, Any]) -> str: method build_vision_payload (line 34) | def build_vision_payload( FILE: src/memu/llm/backends/grok.py class GrokBackend (line 6) | class GrokBackend(OpenAILLMBackend): FILE: src/memu/llm/backends/openai.py class OpenAILLMBackend (line 8) | class OpenAILLMBackend(LLMBackend): method build_summary_payload (line 14) | def build_summary_payload( method parse_summary_response (line 28) | def parse_summary_response(self, data: dict[str, Any]) -> str: method build_vision_payload (line 31) | def build_vision_payload( FILE: src/memu/llm/backends/openrouter.py class OpenRouterLLMBackend (line 8) | class OpenRouterLLMBackend(LLMBackend): method build_summary_payload (line 14) | def build_summary_payload( method parse_summary_response (line 31) | def parse_summary_response(self, data: dict[str, Any]) -> str: method build_vision_payload (line 35) | def build_vision_payload( FILE: src/memu/llm/http_client.py function _load_proxy (line 19) | def _load_proxy() -> str | None: class _EmbeddingBackend (line 24) | class _EmbeddingBackend: method build_embedding_payload (line 28) | def build_embedding_payload(self, *, inputs: list[str], embed_model: s... method parse_embedding_response (line 31) | def parse_embedding_response(self, data: dict[str, Any]) -> list[list[... class _OpenAIEmbeddingBackend (line 35) | class _OpenAIEmbeddingBackend(_EmbeddingBackend): method build_embedding_payload (line 39) | def build_embedding_payload(self, *, inputs: list[str], embed_model: s... method parse_embedding_response (line 42) | def parse_embedding_response(self, data: dict[str, Any]) -> list[list[... class _DoubaoEmbeddingBackend (line 46) | class _DoubaoEmbeddingBackend(_EmbeddingBackend): method build_embedding_payload (line 50) | def build_embedding_payload(self, *, inputs: list[str], embed_model: s... method parse_embedding_response (line 53) | def parse_embedding_response(self, data: dict[str, Any]) -> list[list[... class _OpenRouterEmbeddingBackend (line 57) | class _OpenRouterEmbeddingBackend(_EmbeddingBackend): method build_embedding_payload (line 63) | def build_embedding_payload(self, *, inputs: list[str], embed_model: s... method parse_embedding_response (line 66) | def parse_embedding_response(self, data: dict[str, Any]) -> list[list[... class HTTPLLMClient (line 80) | class HTTPLLMClient: method __init__ (line 83) | def __init__( method chat (line 119) | async def chat( method summarize (line 148) | async def summarize( method vision (line 161) | async def vision( method embed (line 211) | async def embed(self, inputs: list[str]) -> tuple[list[list[float]], d... method transcribe (line 221) | async def transcribe( method _headers (line 279) | def _headers(self) -> dict[str, str]: method _load_backend (line 282) | def _load_backend(self, provider: str) -> LLMBackend: method _load_embedding_backend (line 289) | def _load_embedding_backend(self, provider: str) -> _EmbeddingBackend: FILE: src/memu/llm/lazyllm_client.py class LazyLLMClient (line 9) | class LazyLLMClient: method __init__ (line 14) | def __init__( method _call_async (line 35) | async def _call_async(self, client: Any, *args: Any, **kwargs: Any) ->... method chat (line 44) | async def chat( method summarize (line 69) | async def summarize( method vision (line 93) | async def vision( method embed (line 119) | async def embed( method transcribe (line 140) | async def transcribe( FILE: src/memu/llm/openai_sdk.py class OpenAISDKClient (line 20) | class OpenAISDKClient: method __init__ (line 23) | def __init__( method chat (line 39) | async def chat( method summarize (line 66) | async def summarize( method vision (line 89) | async def vision( method embed (line 155) | async def embed(self, inputs: list[str]) -> tuple[list[list[float]], C... method transcribe (line 172) | async def transcribe( FILE: src/memu/llm/wrapper.py class LLMCallContext (line 18) | class LLMCallContext: class LLMRequestView (line 30) | class LLMRequestView: class LLMResponseView (line 40) | class LLMResponseView: class LLMUsage (line 49) | class LLMUsage: class LLMCallFilter (line 62) | class LLMCallFilter: method __post_init__ (line 69) | def __post_init__(self) -> None: method matches (line 75) | def matches(self, ctx: LLMCallContext, status: str | None) -> bool: class LLMCallMetadata (line 90) | class LLMCallMetadata: class _LLMInterceptor (line 99) | class _LLMInterceptor: class _LLMInterceptorSnapshot (line 109) | class _LLMInterceptorSnapshot: class LLMInterceptorHandle (line 115) | class LLMInterceptorHandle: method __init__ (line 116) | def __init__(self, registry: LLMInterceptorRegistry, interceptor_id: i... method dispose (line 121) | def dispose(self) -> bool: class LLMInterceptorRegistry (line 128) | class LLMInterceptorRegistry: method __init__ (line 129) | def __init__(self, *, strict: bool = False) -> None: method strict (line 138) | def strict(self) -> bool: method register_before (line 141) | def register_before( method register_after (line 151) | def register_after( method register_on_error (line 161) | def register_on_error( method _register (line 171) | def _register( method remove (line 205) | def remove(self, interceptor_id: int) -> bool: method snapshot (line 222) | def snapshot(self) -> _LLMInterceptorSnapshot: class LLMClientWrapper (line 226) | class LLMClientWrapper: method __init__ (line 227) | def __init__( method __getattr__ (line 244) | def __getattr__(self, name: str) -> Any: method summarize (line 247) | async def summarize( method chat (line 274) | async def chat( method vision (line 308) | async def vision( method embed (line 340) | async def embed(self, inputs: list[str]) -> Any: method transcribe (line 354) | async def transcribe( method _invoke (line 387) | async def _invoke( method _build_call_context (line 437) | def _build_call_context(self, model: str | None) -> LLMCallContext: method _run_before (line 450) | async def _run_before( method _run_after (line 466) | async def _run_after( method _run_on_error (line 486) | async def _run_on_error( function _normalize_set (line 507) | def _normalize_set(values: set[str] | None) -> set[str] | None: function _sorted_interceptors (line 513) | def _sorted_interceptors( function _hash_text (line 523) | def _hash_text(value: str | None) -> str | None: function _hash_texts (line 529) | def _hash_texts(values: Sequence[str]) -> str | None: function _safe_file_size (line 539) | def _safe_file_size(path: str) -> int | None: function _build_text_request_view (line 546) | def _build_text_request_view( function _build_text_response_view (line 562) | def _build_text_response_view(response: str) -> LLMResponseView: function _build_embedding_request_view (line 572) | def _build_embedding_request_view(inputs: Sequence[str]) -> LLMRequestView: function _build_embedding_response_view (line 584) | def _build_embedding_response_view(response: Sequence[Sequence[float]]) ... function _get_attr_or_key (line 594) | def _get_attr_or_key(obj: Any, key: str) -> Any: function _extract_finish_reason (line 605) | def _extract_finish_reason(raw_response: Any) -> str | None: function _get_usage_object (line 614) | def _get_usage_object(raw_response: Any) -> Any: function _convert_to_dict (line 623) | def _convert_to_dict(obj: Any) -> dict[str, Any] | None: function _extract_token_details (line 635) | def _extract_token_details(usage_obj: Any, usage_data: dict[str, Any]) -... function _extract_usage_from_raw_response (line 653) | def _extract_usage_from_raw_response(kind: str, raw_response: Any) -> di... function _coerce_filter (line 706) | def _coerce_filter( function _ensure_set (line 723) | def _ensure_set(value: Any) -> set[str] | None: function _should_run_interceptor (line 733) | def _should_run_interceptor( function _safe_invoke_interceptor (line 760) | async def _safe_invoke_interceptor( FILE: src/memu/utils/conversation.py function format_conversation_for_preprocess (line 7) | def format_conversation_for_preprocess(raw_text: str) -> str: function _try_parse_json (line 39) | def _try_parse_json(text: str) -> Any | None: function _extract_messages (line 50) | def _extract_messages(payload: Any) -> list[dict[str, Any]] | None: function _format_messages (line 60) | def _format_messages(messages: list[dict[str, Any]]) -> str: function _extract_text_content (line 72) | def _extract_text_content(content: Any) -> str: function _extract_created_at (line 83) | def _extract_created_at(msg: dict[str, Any]) -> str | None: FILE: src/memu/utils/references.py function extract_references (line 20) | def extract_references(text: str | None) -> list[str]: function strip_references (line 52) | def strip_references(text: str | None) -> str | None: function format_references_as_citations (line 77) | def format_references_as_citations(text: str | None) -> str | None: function fetch_referenced_items (line 118) | def fetch_referenced_items( function build_item_reference_map (line 149) | def build_item_reference_map(items: list[tuple[str, str]]) -> str: FILE: src/memu/utils/tool.py function get_tool_calls (line 11) | def get_tool_calls(item: MemoryItem) -> list[dict[str, Any]]: function set_tool_calls (line 24) | def set_tool_calls(item: MemoryItem, tool_calls: list[dict[str, Any]]) -... function add_tool_call (line 36) | def add_tool_call(item: MemoryItem, tool_call: ToolCallResult) -> None: function get_tool_statistics (line 55) | def get_tool_statistics(item: MemoryItem, recent_n: int = 20) -> dict[st... FILE: src/memu/utils/video.py class VideoFrameExtractor (line 15) | class VideoFrameExtractor: method is_ffmpeg_available (line 21) | def is_ffmpeg_available(cls) -> bool: method extract_middle_frame (line 31) | def extract_middle_frame(video_path: str, output_path: str | None = No... method extract_multiple_frames (line 121) | def extract_multiple_frames( method _ensure_safe_cli_path (line 224) | def _ensure_safe_cli_path(path_obj: Path) -> Path: method _resolve_existing_path (line 233) | def _resolve_existing_path(cls, path: str, *, description: str) -> Path: method _resolve_output_path (line 242) | def _resolve_output_path(cls, path: str) -> Path: method _run_ffmpeg_command (line 247) | def _run_ffmpeg_command( FILE: src/memu/workflow/interceptor.py class WorkflowStepContext (line 17) | class WorkflowStepContext: class _WorkflowInterceptor (line 27) | class _WorkflowInterceptor: class _WorkflowInterceptorSnapshot (line 34) | class _WorkflowInterceptorSnapshot: class WorkflowInterceptorHandle (line 40) | class WorkflowInterceptorHandle: method __init__ (line 43) | def __init__(self, registry: WorkflowInterceptorRegistry, interceptor_... method dispose (line 48) | def dispose(self) -> bool: class WorkflowInterceptorRegistry (line 56) | class WorkflowInterceptorRegistry: method __init__ (line 65) | def __init__(self, *, strict: bool = False) -> None: method strict (line 74) | def strict(self) -> bool: method register_before (line 78) | def register_before( method register_after (line 91) | def register_after( method register_on_error (line 104) | def register_on_error( method _register (line 117) | def _register( method remove (line 145) | def remove(self, interceptor_id: int) -> bool: method snapshot (line 163) | def snapshot(self) -> _WorkflowInterceptorSnapshot: function run_before_interceptors (line 168) | async def run_before_interceptors( function run_after_interceptors (line 180) | async def run_after_interceptors( function run_on_error_interceptors (line 192) | async def run_on_error_interceptors( function _safe_invoke_interceptor (line 205) | async def _safe_invoke_interceptor( FILE: src/memu/workflow/pipeline.py class PipelineRevision (line 13) | class PipelineRevision: class PipelineManager (line 21) | class PipelineManager: method __init__ (line 22) | def __init__(self, *, available_capabilities: set[str] | None = None, ... method register (line 27) | def register( method build (line 47) | def build(self, name: str) -> list[WorkflowStep]: method config_step (line 51) | def config_step(self, name: str, step_id: str, configs: dict[str, Any]... method insert_after (line 64) | def insert_after(self, name: str, target_step_id: str, new_step: Workf... method insert_before (line 75) | def insert_before(self, name: str, target_step_id: str, new_step: Work... method replace_step (line 86) | def replace_step(self, name: str, target_step_id: str, new_step: Workf... method remove_step (line 97) | def remove_step(self, name: str, target_step_id: str) -> int: method _mutate (line 108) | def _mutate(self, name: str, mutator: Any) -> int: method _current_revision (line 124) | def _current_revision(self, name: str) -> PipelineRevision: method _validate_steps (line 131) | def _validate_steps(self, steps: list[WorkflowStep], *, initial_state_... method revision_token (line 166) | def revision_token(self) -> str: FILE: src/memu/workflow/runner.py class WorkflowRunner (line 13) | class WorkflowRunner(Protocol): method run (line 18) | async def run( class LocalWorkflowRunner (line 28) | class LocalWorkflowRunner: method run (line 31) | async def run( function register_workflow_runner (line 52) | def register_workflow_runner(name: str, factory: RunnerFactory) -> None: function resolve_workflow_runner (line 61) | def resolve_workflow_runner(spec: WorkflowRunnerSpec) -> WorkflowRunner: FILE: src/memu/workflow/step.py class WorkflowStep (line 17) | class WorkflowStep: method copy (line 27) | def copy(self) -> WorkflowStep: method run (line 40) | async def run(self, state: WorkflowState, context: WorkflowContext) ->... function run_steps (line 50) | async def run_steps( FILE: tests/integrations/test_langgraph.py function mock_memory_service (line 16) | def mock_memory_service(): function test_adapter_initialization (line 31) | async def test_adapter_initialization(mock_memory_service): function test_save_memory_tool_execution (line 45) | async def test_save_memory_tool_execution(mock_memory_service): function test_search_memory_tool_execution (line 63) | async def test_search_memory_tool_execution(mock_memory_service): function test_import_langgraph_dep (line 76) | def test_import_langgraph_dep(): FILE: tests/llm/test_grok_provider.py class TestGrokProvider (line 9) | class TestGrokProvider(unittest.IsolatedAsyncioTestCase): method test_settings_defaults (line 10) | def test_settings_defaults(self): method test_client_initialization_with_grok_config (line 18) | async def test_client_initialization_with_grok_config(self, mock_async... method test_grok_backend_payload_parsing (line 38) | def test_grok_backend_payload_parsing(self): FILE: tests/rust_entry_test.py function test_rust_entry (line 4) | def test_rust_entry(): FILE: tests/test_client_wrapper.py class TestMemuOpenAIWrapper (line 10) | class TestMemuOpenAIWrapper: method test_extract_user_query_simple (line 13) | def test_extract_user_query_simple(self): method test_extract_user_query_multiple_turns (line 27) | def test_extract_user_query_multiple_turns(self): method test_inject_memories_into_existing_system (line 42) | def test_inject_memories_into_existing_system(self): method test_inject_memories_creates_system_message (line 66) | def test_inject_memories_creates_system_message(self): method test_inject_memories_empty_list (line 85) | def test_inject_memories_empty_list(self): method test_wrap_openai_convenience_function (line 96) | def test_wrap_openai_convenience_function(self): method test_wrapper_proxies_other_attributes (line 117) | def test_wrapper_proxies_other_attributes(self): FILE: tests/test_inmemory.py function main (line 6) | async def main(): FILE: tests/test_lazyllm.py function test_lazyllm_client (line 21) | async def test_lazyllm_client(): FILE: tests/test_openrouter.py function _print_categories (line 27) | def _print_categories(categories, max_items=3): function _print_items (line 36) | def _print_items(items, max_items=3): function _test_memorize (line 46) | async def _test_memorize(service, file_path, output_data): function _test_retrieve (line 67) | async def _test_retrieve(service, queries, method, test_num, output_data): function test_openrouter_full_workflow (line 86) | async def test_openrouter_full_workflow(): FILE: tests/test_postgres.py function main (line 6) | async def main(): FILE: tests/test_references.py class TestExtractReferences (line 22) | class TestExtractReferences: method test_extract_single_reference (line 25) | def test_extract_single_reference(self): method test_extract_multiple_references (line 31) | def test_extract_multiple_references(self): method test_extract_comma_separated_references (line 37) | def test_extract_comma_separated_references(self): method test_extract_no_duplicates (line 43) | def test_extract_no_duplicates(self): method test_extract_empty_text (line 49) | def test_extract_empty_text(self): method test_extract_no_references (line 54) | def test_extract_no_references(self): method test_extract_with_hyphens_and_underscores (line 60) | def test_extract_with_hyphens_and_underscores(self): class TestStripReferences (line 67) | class TestStripReferences: method test_strip_single_reference (line 70) | def test_strip_single_reference(self): method test_strip_multiple_references (line 76) | def test_strip_multiple_references(self): method test_strip_comma_separated (line 82) | def test_strip_comma_separated(self): method test_strip_empty_text (line 88) | def test_strip_empty_text(self): method test_strip_no_references (line 93) | def test_strip_no_references(self): class TestFormatReferencesAsCitations (line 100) | class TestFormatReferencesAsCitations: method test_format_single_citation (line 103) | def test_format_single_citation(self): method test_format_multiple_citations (line 113) | def test_format_multiple_citations(self): method test_format_empty_text (line 123) | def test_format_empty_text(self): method test_format_no_references (line 128) | def test_format_no_references(self): class TestBuildItemReferenceMap (line 135) | class TestBuildItemReferenceMap: method test_build_map_single_item (line 138) | def test_build_map_single_item(self): method test_build_map_multiple_items (line 146) | def test_build_map_multiple_items(self): method test_build_map_truncates_long_summaries (line 156) | def test_build_map_truncates_long_summaries(self): method test_build_map_empty_list (line 164) | def test_build_map_empty_list(self): class TestReferenceIntegration (line 169) | class TestReferenceIntegration: method test_roundtrip_extract_and_strip (line 172) | def test_roundtrip_extract_and_strip(self): method test_citation_preserves_content (line 184) | def test_citation_preserves_content(self): FILE: tests/test_salience.py function compute_content_hash (line 16) | def compute_content_hash(summary: str, memory_type: str) -> str: function salience_score (line 23) | def salience_score( function _cosine (line 42) | def _cosine(a: list[float], b: list[float]) -> float: function cosine_topk_salience (line 51) | def cosine_topk_salience( class TestContentHash (line 71) | class TestContentHash: method test_basic_hash (line 74) | def test_basic_hash(self): method test_different_content_different_hash (line 81) | def test_different_content_different_hash(self): method test_different_type_different_hash (line 87) | def test_different_type_different_hash(self): method test_whitespace_normalization (line 93) | def test_whitespace_normalization(self): method test_case_insensitive (line 100) | def test_case_insensitive(self): class TestSalienceScore (line 107) | class TestSalienceScore: method test_basic_salience (line 110) | def test_basic_salience(self): method test_higher_reinforcement_higher_score (line 120) | def test_higher_reinforcement_higher_score(self): method test_recent_memory_higher_score (line 127) | def test_recent_memory_higher_score(self): method test_none_last_reinforced_neutral (line 136) | def test_none_last_reinforced_neutral(self): method test_reinforcement_vs_recency_tradeoff (line 143) | def test_reinforcement_vs_recency_tradeoff(self): class TestCosineTopkSalience (line 160) | class TestCosineTopkSalience: method test_basic_retrieval (line 163) | def test_basic_retrieval(self) -> None: method test_skips_none_embeddings (line 180) | def test_skips_none_embeddings(self) -> None: method test_respects_k_limit (line 195) | def test_respects_k_limit(self) -> None: FILE: tests/test_sqlite.py function _print_results (line 9) | def _print_results(title: str, result: dict) -> None: function main (line 23) | async def main(): FILE: tests/test_tool_memory.py class TestToolCallResult (line 51) | class TestToolCallResult: method test_create_tool_call_result (line 54) | def test_create_tool_call_result(self): method test_generate_hash (line 74) | def test_generate_hash(self): method test_ensure_hash (line 102) | def test_ensure_hash(self): method test_string_input (line 115) | def test_string_input(self): class TestMemoryItemToolType (line 127) | class TestMemoryItemToolType: method test_tool_memory_type_literal (line 130) | def test_tool_memory_type_literal(self): method test_create_tool_memory (line 137) | def test_create_tool_memory(self): method test_add_tool_call (line 153) | def test_add_tool_call(self): method test_add_tool_call_wrong_type (line 177) | def test_add_tool_call_wrong_type(self): method test_get_tool_statistics_empty (line 194) | def test_get_tool_statistics_empty(self): method test_get_tool_statistics (line 211) | def test_get_tool_statistics(self): method test_get_tool_statistics_recent_n (line 260) | def test_get_tool_statistics_recent_n(self): class TestMemoryItemNewFields (line 283) | class TestMemoryItemNewFields: method test_when_to_use_field (line 286) | def test_when_to_use_field(self): method test_metadata_field (line 297) | def test_metadata_field(self): method test_default_values (line 317) | def test_default_values(self): FILE: tests/utils/test_conversation.py class TestFormatConversationForPreprocess (line 8) | class TestFormatConversationForPreprocess: method test_happy_path_valid_formats (line 45) | def test_happy_path_valid_formats(self, input_json: str, expected_outp... method test_edge_cases_empty (line 60) | def test_edge_cases_empty(self, edge_input: str, expected: str) -> None: method test_malformed_json_handling (line 66) | def test_malformed_json_handling(self) -> None: method test_unexpected_json_structures (line 78) | def test_unexpected_json_structures(self) -> None: