SYMBOL INDEX (227 symbols across 21 files) FILE: app.py class StreamlitChatMessageHistory (line 47) | class StreamlitChatMessageHistory: method __init__ (line 50) | def __init__(self, key: str): method messages (line 57) | def messages(self): method add_user_message (line 61) | def add_user_message(self, content: str): method add_ai_message (line 65) | def add_ai_message(self, content: str): function _load_strings (line 71) | def _load_strings() -> dict: function _get_prompt_template (line 83) | def _get_prompt_template(is_refinement: bool) -> str: function are_all_inputs_valid (line 103) | def are_all_inputs_valid( function handle_error (line 157) | def handle_error(error_msg: str, should_log: bool): function reset_api_key (line 171) | def reset_api_key(): function reset_chat_history (line 178) | def reset_chat_history(): function build_ui (line 331) | def build_ui(): function set_up_chat_ui (line 358) | def set_up_chat_ui(): function _is_it_refinement (line 497) | def _is_it_refinement() -> bool: function _get_user_messages (line 515) | def _get_user_messages() -> list[str]: function _display_download_button (line 528) | def _display_download_button(file_path: pathlib.Path): FILE: src/slidedeckai/cli.py function group_models_by_provider (line 13) | def group_models_by_provider(models: list[str]) -> dict[str, list[str]]: function format_models_as_bullets (line 34) | def format_models_as_bullets(models: list[str]) -> str: class CustomHelpFormatter (line 54) | class CustomHelpFormatter(argparse.HelpFormatter): method _format_action_invocation (line 58) | def _format_action_invocation(self, action: Any) -> str: method _split_lines (line 71) | def _split_lines(self, text: str, width: int) -> list[str]: class CustomArgumentParser (line 95) | class CustomArgumentParser(argparse.ArgumentParser): method error (line 99) | def error(self, message: str) -> None: function format_models_list (line 120) | def format_models_list() -> str: function format_model_help (line 127) | def format_model_help() -> str: function main (line 132) | def main(): FILE: src/slidedeckai/core.py function _process_llm_chunk (line 28) | def _process_llm_chunk(chunk: Any) -> str: function _stream_llm_response (line 45) | def _stream_llm_response(llm: Any, prompt: str, progress_callback=None) ... class SlideDeckAI (line 73) | class SlideDeckAI: method __init__ (line 78) | def __init__( method _initialize_llm (line 119) | def _initialize_llm(self): method _get_prompt_template (line 138) | def _get_prompt_template(self, is_refinement: bool) -> str: method generate (line 156) | def generate(self, progress_callback=None): method revise (line 185) | def revise(self, instructions: str, template_idx: int | None = None, p... method _generate_slide_deck (line 236) | def _generate_slide_deck(self, json_str: str) -> Union[pathlib.Path, N... method set_model (line 272) | def set_model(self, model_name: str, api_key: str | None = None): method set_template (line 293) | def set_template(self, idx): method reset (line 303) | def reset(self): FILE: src/slidedeckai/global_config.py class GlobalConfig (line 19) | class GlobalConfig: function get_max_output_tokens (line 278) | def get_max_output_tokens(llm_name: str) -> int: FILE: src/slidedeckai/helpers/chat_helper.py class ChatMessage (line 6) | class ChatMessage: method __init__ (line 9) | def __init__(self, content: str, role: str): class HumanMessage (line 15) | class HumanMessage(ChatMessage): method __init__ (line 18) | def __init__(self, content: str): class AIMessage (line 22) | class AIMessage(ChatMessage): method __init__ (line 25) | def __init__(self, content: str): class ChatMessageHistory (line 29) | class ChatMessageHistory: method __init__ (line 32) | def __init__(self): method add_user_message (line 35) | def add_user_message(self, content: str): method add_ai_message (line 39) | def add_ai_message(self, content: str): class ChatPromptTemplate (line 44) | class ChatPromptTemplate: method __init__ (line 47) | def __init__(self, template: str): method from_template (line 51) | def from_template(cls, template: str): method format (line 54) | def format(self, **kwargs): FILE: src/slidedeckai/helpers/file_manager.py function get_pdf_contents (line 13) | def get_pdf_contents( function validate_page_range (line 41) | def validate_page_range( FILE: src/slidedeckai/helpers/icons_embeddings.py function get_icons_list (line 18) | def get_icons_list() -> list[str]: function get_embeddings (line 31) | def get_embeddings(texts: Union[str, list[str]]) -> np.ndarray: function save_icons_embeddings (line 57) | def save_icons_embeddings(): function load_saved_embeddings (line 71) | def load_saved_embeddings() -> tuple[np.ndarray, np.ndarray]: function find_icons (line 84) | def find_icons(keywords: list[str]) -> list[str]: function main (line 104) | def main(): FILE: src/slidedeckai/helpers/image_search.py function search_pexels (line 42) | def search_pexels( function get_photo_url_from_api_response (line 93) | def get_photo_url_from_api_response( function get_image_from_url (line 132) | def get_image_from_url(url: str) -> BytesIO: function extract_dimensions (line 155) | def extract_dimensions(url: str) -> tuple[int, int]: FILE: src/slidedeckai/helpers/llm_helper.py function get_provider_model (line 39) | def get_provider_model(provider_model: str, use_ollama: bool) -> Tuple[s... function is_valid_llm_provider_model (line 82) | def is_valid_llm_provider_model( function get_litellm_model_name (line 124) | def get_litellm_model_name(provider: str, model: str) -> Optional[str]: function stream_litellm_completion (line 142) | def stream_litellm_completion( function get_litellm_llm (line 222) | def get_litellm_llm( FILE: src/slidedeckai/helpers/pptx_helper.py function remove_slide_number_from_heading (line 67) | def remove_slide_number_from_heading(header: str) -> str: function add_bulleted_items (line 84) | def add_bulleted_items(text_frame: pptx.text.text.TextFrame, flat_items_... function format_text (line 103) | def format_text(frame_paragraph, text: str): function generate_powerpoint_presentation (line 142) | def generate_powerpoint_presentation( function get_flat_list_of_contents (line 237) | def get_flat_list_of_contents(items: list, level: int) -> list[tuple]: function get_slide_placeholders (line 261) | def get_slide_placeholders( function _handle_default_display (line 306) | def _handle_default_display( function _handle_display_image__in_foreground (line 374) | def _handle_display_image__in_foreground( function _handle_display_image__in_background (line 455) | def _handle_display_image__in_background( function _handle_icons_ideas (line 573) | def _handle_icons_ideas( function _add_text_at_bottom (line 688) | def _add_text_at_bottom( function _handle_double_col_layout (line 725) | def _handle_double_col_layout( function _handle_step_by_step_process (line 825) | def _handle_step_by_step_process( function _handle_table (line 936) | def _handle_table( function _handle_key_message (line 990) | def _handle_key_message( function _get_slide_width_height_inches (line 1024) | def _get_slide_width_height_inches(presentation: pptx.Presentation) -> t... function print_slide_layouts (line 1041) | def print_slide_layouts(slides_template: str) -> None: FILE: src/slidedeckai/helpers/text_helper.py function is_valid_prompt (line 7) | def is_valid_prompt(prompt: str) -> bool: function get_clean_json (line 23) | def get_clean_json(json_str: str) -> str: function fix_malformed_json (line 58) | def fix_malformed_json(json_str: str) -> str: FILE: tests/unit/conftest.py function mock_dependencies (line 18) | def mock_dependencies(): function mock_env_vars (line 26) | def mock_env_vars(): function mock_temp_file (line 32) | def mock_temp_file(): FILE: tests/unit/test_cli.py function test_group_models_by_provider (line 27) | def test_group_models_by_provider(): function test_format_models_as_bullets (line 49) | def test_format_models_as_bullets(): function test_custom_help_formatter_comprehensive (line 72) | def test_custom_help_formatter_comprehensive(): function test_custom_argument_parser_error_handling (line 113) | def test_custom_argument_parser_error_handling(): function test_format_models_list (line 135) | def test_format_models_list(): function test_format_model_help (line 148) | def test_format_model_help(): function test_main_no_args (line 159) | def test_main_no_args(): function test_main_list_models (line 173) | def test_main_list_models(): function test_main_generate_command (line 185) | def test_main_generate_command(mock_move, mock_slidedeckai): function test_main_generate_with_all_options (line 210) | def test_main_generate_with_all_options(mock_move, mock_slidedeckai): function test_main_generate_missing_required_args (line 244) | def test_main_generate_missing_required_args(mock_slidedeckai): function test_main_generate_invalid_template_id (line 272) | def test_main_generate_invalid_template_id(mock_slidedeckai): FILE: tests/unit/test_core.py function mock_env (line 24) | def mock_env(): function mock_temp_file (line 31) | def mock_temp_file(): function slide_deck_ai (line 39) | def slide_deck_ai(): function test_process_llm_chunk_string (line 48) | def test_process_llm_chunk_string(): function test_process_llm_chunk_object (line 54) | def test_process_llm_chunk_object(): function test_stream_llm_response (line 61) | def test_stream_llm_response(mock_llm_helper): function test_stream_llm_response_with_callback (line 69) | def test_stream_llm_response_with_callback(mock_llm_helper): function test_slide_deck_ai_init_invalid_model (line 82) | def test_slide_deck_ai_init_invalid_model(): function test_slide_deck_ai_init_valid (line 89) | def test_slide_deck_ai_init_valid(slide_deck_ai): function test_set_model_valid_updates_model (line 103) | def test_set_model_valid_updates_model(slide_deck_ai) -> None: function test_set_model_valid_updates_api_key (line 125) | def test_set_model_valid_updates_api_key(slide_deck_ai) -> None: function test_set_model_invalid_raises (line 135) | def test_set_model_invalid_raises(slide_deck_ai) -> None: function test_generate_slide_deck (line 144) | def test_generate_slide_deck(mock_get_llm, mock_get_provider, mock_temp_... function test_slide_deck (line 157) | def test_slide_deck(mock_get_llm, mock_get_provider, mock_temp_file, sli... function test_revise_without_generate (line 172) | def test_revise_without_generate(slide_deck_ai): function test_revise_with_new_template (line 181) | def test_revise_with_new_template(mock_get_llm, mock_get_provider, mock_... function test_set_template (line 197) | def test_set_template(slide_deck_ai): function test_reset (line 206) | def test_reset(slide_deck_ai): function test_get_prompt_template (line 218) | def test_get_prompt_template(mock_get_llm, mock_get_provider, slide_deck... function test_generate_with_pdf (line 230) | def test_generate_with_pdf(mock_get_llm, mock_get_provider, slide_deck_ai): function test_chat_history_limit (line 245) | def test_chat_history_limit(slide_deck_ai): function test_generate_slide_deck_json_error (line 260) | def test_generate_slide_deck_json_error(mock_json_loads, slide_deck_ai): function test_generate_slide_deck_unrecoverable_json_error (line 272) | def test_generate_slide_deck_unrecoverable_json_error(mock_json_loads, s... function test_generate_slide_deck_pptx_error (line 282) | def test_generate_slide_deck_pptx_error(mock_json_loads, mock_generate_p... function test_stream_llm_response_error (line 293) | def test_stream_llm_response_error(): function test_initialize_llm (line 305) | def test_initialize_llm(mock_get_llm, mock_get_provider, slide_deck_ai): function test_topic_reset (line 316) | def test_topic_reset(slide_deck_ai): FILE: tests/unit/test_file_manager.py class _FakePage (line 12) | class _FakePage: method __init__ (line 13) | def __init__(self, text: str) -> None: method extract_text (line 16) | def extract_text(self) -> str: class _FakePdf (line 20) | class _FakePdf: method __init__ (line 21) | def __init__(self, pages_text: list[str]) -> None: function _make_fake_pdf_reader (line 25) | def _make_fake_pdf_reader(pages_text: list[str]) -> Any: function test_get_pdf_contents_single_page (line 38) | def test_get_pdf_contents_single_page(monkeypatch: pytest.MonkeyPatch) -... function test_get_pdf_contents_multi_page_range (line 56) | def test_get_pdf_contents_multi_page_range(monkeypatch: pytest.MonkeyPat... function test_validate_page_range_various (line 83) | def test_validate_page_range_various( function test_validate_page_range_two_page_return (line 101) | def test_validate_page_range_two_page_return(monkeypatch: pytest.MonkeyP... function test_get_pdf_contents_handles_empty_page_text (line 118) | def test_get_pdf_contents_handles_empty_page_text(monkeypatch: pytest.Mo... FILE: tests/unit/test_icons_embeddings.py function _reload_module_with_dummies (line 13) | def _reload_module_with_dummies(monkeypatch: Any, emb_dim: int = 4): function test_get_icons_list (line 81) | def test_get_icons_list(tmp_path: Path, monkeypatch: Any) -> None: function test_get_embeddings_single_and_list (line 101) | def test_get_embeddings_single_and_list(monkeypatch: Any) -> None: function test_save_and_load_embeddings (line 125) | def test_save_and_load_embeddings(tmp_path: Path, monkeypatch: Any) -> N... function test_find_icons (line 157) | def test_find_icons(monkeypatch: Any, tmp_path: Path) -> None: function test_main_calls_and_prints (line 194) | def test_main_calls_and_prints(monkeypatch: Any, capsys: Any) -> None: FILE: tests/unit/test_image_search.py class _MockResponse (line 12) | class _MockResponse: method __init__ (line 15) | def __init__( method raise_for_status (line 26) | def raise_for_status(self) -> None: method json (line 32) | def json(self) -> Any: function _dummy_requests_get_success_search (line 38) | def _dummy_requests_get_success_search( function _dummy_requests_get_image (line 68) | def _dummy_requests_get_image( function test_extract_dimensions_with_params (line 81) | def test_extract_dimensions_with_params() -> None: function test_extract_dimensions_missing_params (line 91) | def test_extract_dimensions_missing_params() -> None: function test_get_photo_url_from_api_response_none (line 97) | def test_get_photo_url_from_api_response_none() -> None: function test_get_photo_url_from_api_response_selects_large_and_original (line 103) | def test_get_photo_url_from_api_response_selects_large_and_original(monk... function test_get_image_from_url_success (line 136) | def test_get_image_from_url_success(monkeypatch) -> None: function test_search_pexels_success (line 150) | def test_search_pexels_success(monkeypatch) -> None: function test_search_pexels_raises_on_request_error (line 164) | def test_search_pexels_raises_on_request_error(monkeypatch) -> None: function test_search_pexels_returns_empty_when_no_api_key (line 176) | def test_search_pexels_returns_empty_when_no_api_key(monkeypatch) -> None: function test_get_photo_url_from_api_response_returns_none_when_no_api_key (line 184) | def test_get_photo_url_from_api_response_returns_none_when_no_api_key(mo... FILE: tests/unit/test_llm_helper.py function test_get_provider_model (line 31) | def test_get_provider_model(provider_model, use_ollama, expected): function test_is_valid_llm_provider_model (line 85) | def test_is_valid_llm_provider_model( function test_get_litellm_model_name (line 117) | def test_get_litellm_model_name(provider, model, expected): function test_stream_litellm_completion_success (line 124) | def test_stream_litellm_completion_success(mock_litellm): function test_stream_litellm_completion_azure (line 153) | def test_stream_litellm_completion_azure(mock_litellm): function test_stream_litellm_completion_error (line 180) | def test_stream_litellm_completion_error(mock_litellm): function test_get_litellm_llm (line 199) | def test_get_litellm_llm(mock_stream): function test_litellm_not_installed (line 215) | def test_litellm_not_installed(): function test_stream_litellm_completion_message_format (line 234) | def test_stream_litellm_completion_message_format(mock_litellm): FILE: tests/unit/test_pptx_helper.py function mock_pptx_presentation (line 17) | def mock_pptx_presentation() -> Mock: function mock_slide (line 58) | def mock_slide() -> Mock: function mock_text_frame (line 108) | def mock_text_frame() -> Mock: function mock_shape (line 143) | def mock_shape() -> Mock: function test_remove_slide_number_from_heading (line 174) | def test_remove_slide_number_from_heading(): function test_format_text (line 188) | def test_format_text(): function test_get_flat_list_of_contents (line 226) | def test_get_flat_list_of_contents(): function test_add_bulleted_items (line 249) | def test_add_bulleted_items(mock_format_text, mock_text_frame: Mock): function test_handle_table (line 273) | def test_handle_table(mock_pptx_presentation: Mock): function test_handle_table_no_table (line 343) | def test_handle_table_no_table(mock_pptx_presentation: Mock): function test_handle_icons_ideas (line 363) | def test_handle_icons_ideas( function test_handle_icons_ideas_invalid (line 400) | def test_handle_icons_ideas_invalid(mock_pptx_presentation: Mock): function test_generate_powerpoint_presentation (line 422) | def test_generate_powerpoint_presentation( function test_generate_powerpoint_presentation_error_handling (line 478) | def test_generate_powerpoint_presentation_error_handling( function test_handle_double_col_layout (line 499) | def test_handle_double_col_layout( function test_handle_double_col_layout_invalid (line 530) | def test_handle_double_col_layout_invalid(mock_pptx_presentation: Mock): function test_handle_display_image__in_foreground (line 553) | def test_handle_display_image__in_foreground( function test_handle_display_image__in_foreground_no_keywords (line 591) | def test_handle_display_image__in_foreground_no_keywords( function test_handle_display_image__in_background (line 617) | def test_handle_display_image__in_background( function test_handle_step_by_step_process (line 661) | def test_handle_step_by_step_process(mock_pptx_presentation: Mock): function test_handle_step_by_step_process_vertical (line 705) | def test_handle_step_by_step_process_vertical(mock_pptx_presentation: Mo... function test_handle_step_by_step_process_invalid (line 750) | def test_handle_step_by_step_process_invalid(mock_pptx_presentation: Mock): function test_handle_default_display_with_foreground_image (line 795) | def test_handle_default_display_with_foreground_image( function test_handle_default_display_with_background_image (line 808) | def test_handle_default_display_with_background_image( function test_handle_default_display (line 819) | def test_handle_default_display(mock_pptx_presentation: Mock, mock_text_... function test_get_slide_width_height_inches (line 853) | def test_get_slide_width_height_inches(mock_pptx_presentation: Mock): function test_get_slide_placeholders (line 860) | def test_get_slide_placeholders(mock_slide: Mock): function test_add_text_at_bottom (line 868) | def test_add_text_at_bottom(mock_slide: Mock): function test_add_text_at_bottom_no_hyperlink (line 880) | def test_add_text_at_bottom_no_hyperlink(mock_slide: Mock): function test_handle_double_col_layout_key_error (line 891) | def test_handle_double_col_layout_key_error(mock_pptx_presentation: Mock): function test_handle_display_image__in_background_no_keywords (line 919) | def test_handle_display_image__in_background_no_keywords(mock_pptx_prese... function test_handle_key_message (line 935) | def test_handle_key_message(mock_pptx_presentation: Mock): function test_format_text_complex (line 970) | def test_format_text_complex(): function test_print_slide_layouts (line 1048) | def test_print_slide_layouts(mock_pptx_presentation: Mock, capsys: pytes... FILE: tests/unit/test_text_helper.py function test_is_valid_prompt_valid (line 10) | def test_is_valid_prompt_valid() -> None: function test_is_valid_prompt_invalid_short (line 18) | def test_is_valid_prompt_invalid_short() -> None: function test_is_valid_prompt_invalid_no_space (line 23) | def test_is_valid_prompt_invalid_no_space() -> None: function test_get_clean_json_with_backticks (line 28) | def test_get_clean_json_with_backticks() -> None: function test_get_clean_json_with_extra_text (line 35) | def test_get_clean_json_with_extra_text() -> None: function test_get_clean_json_no_fences (line 42) | def test_get_clean_json_no_fences() -> None: function test_get_clean_json_irrelevant_fence (line 49) | def test_get_clean_json_irrelevant_fence() -> None: function test_fix_malformed_json_uses_json_repair (line 57) | def test_fix_malformed_json_uses_json_repair() -> None: FILE: tests/unit/test_utils.py class MockBertTokenizer (line 7) | class MockBertTokenizer: method __init__ (line 11) | def __init__(self, *args, **kwargs): method encode (line 16) | def encode(self, text, add_special_tokens=True, truncation=True, max_l... method decode (line 23) | def decode(self, token_ids, skip_special_tokens=True): method __call__ (line 30) | def __call__(self, text, padding=True, truncation=True, max_length=Non... function patch_bert_tokenizer (line 40) | def patch_bert_tokenizer(): function get_mock_llm_response (line 49) | def get_mock_llm_response(): class MockStreamResponse (line 67) | class MockStreamResponse: method __init__ (line 71) | def __init__(self, content): method __iter__ (line 74) | def __iter__(self): function get_mock_llm (line 78) | def get_mock_llm():