Coverage report: 91%

Files Functions Classes

coverage.py v7.13.5, created at 2026-08-08 23:08 +0800

File function   statements missing excluded   coverage
src / lexigram / ai / relay / __init__.py (no function)   11 0 0   100%
src / lexigram / ai / relay / context.py _no_default_max_tokens   1 0 0   100%
src / lexigram / ai / relay / context.py _no_safety_setting   1 0 0   100%
src / lexigram / ai / relay / context.py _no_image_generation   1 0 0   100%
src / lexigram / ai / relay / context.py _no_thinking_suffix   1 0 0   100%
src / lexigram / ai / relay / context.py ConversionContext.wrap   3 0 0   100%
src / lexigram / ai / relay / context.py ConversionContext.max_tokens_for   4 0 0   100%
src / lexigram / ai / relay / context.py ConversionContext.normalize_model   1 0 0   100%
src / lexigram / ai / relay / context.py ConversionContext.resolve_model   4 0 0   100%
src / lexigram / ai / relay / context.py (no function)   25 0 0   100%
src / lexigram / ai / relay / di / __init__.py (no function)   3 0 0   100%
src / lexigram / ai / relay / di / provider.py RelayProvider.register   4 0 0   100%
src / lexigram / ai / relay / di / provider.py RelayProvider.boot   1 0 0   100%
src / lexigram / ai / relay / di / provider.py RelayProvider.shutdown   1 0 0   100%
src / lexigram / ai / relay / di / provider.py RelayProvider.health_check   1 1 0   0%
src / lexigram / ai / relay / di / provider.py (no function)   17 0 2   100%
src / lexigram / ai / relay / engine.py _converter_id   1 0 0   100%
src / lexigram / ai / relay / engine.py _normalize_steps   1 0 0   100%
src / lexigram / ai / relay / engine.py _route_spec   2 2 0   0%
src / lexigram / ai / relay / engine.py RelayConverterEngine.__init__   1 0 0   100%
src / lexigram / ai / relay / engine.py RelayConverterEngine.convert_request   5 0 0   100%
src / lexigram / ai / relay / engine.py RelayConverterEngine.convert_response   5 2 0   60%
src / lexigram / ai / relay / engine.py RelayConverterEngine.new_stream_session   1 0 0   100%
src / lexigram / ai / relay / engine.py RelayConverterEngine.convert_stream_chunk   1 1 0   0%
src / lexigram / ai / relay / engine.py RelayConverterEngine.finalize   1 1 0   0%
src / lexigram / ai / relay / engine.py RelayConverterEngine._convert   43 8 0   81%
src / lexigram / ai / relay / engine.py RelayConverterEngine._noop_result   2 0 0   100%
src / lexigram / ai / relay / engine.py convert_request_via   1 0 0   100%
src / lexigram / ai / relay / engine.py convert_response_via   1 0 0   100%
src / lexigram / ai / relay / engine.py convert_request_by_id   4 0 0   100%
src / lexigram / ai / relay / engine.py convert_response_by_id   4 0 0   100%
src / lexigram / ai / relay / engine.py (no function)   29 0 0   100%
src / lexigram / ai / relay / errors.py malformed_payload   1 0 0   100%
src / lexigram / ai / relay / errors.py missing_required_option   1 0 0   100%
src / lexigram / ai / relay / errors.py unsupported_feature   1 0 0   100%
src / lexigram / ai / relay / errors.py unsupported_format   1 0 0   100%
src / lexigram / ai / relay / errors.py unsupported_route   1 0 0   100%
src / lexigram / ai / relay / errors.py duplicate_registration   1 0 0   100%
src / lexigram / ai / relay / errors.py media_resolution_required   1 0 0   100%
src / lexigram / ai / relay / errors.py serialization_error   1 0 0   100%
src / lexigram / ai / relay / errors.py stream_state_invalid   1 0 0   100%
src / lexigram / ai / relay / errors.py stream_already_finalized   1 0 0   100%
src / lexigram / ai / relay / errors.py translate   5 0 0   100%
src / lexigram / ai / relay / errors.py (no function)   14 0 0   100%
src / lexigram / ai / relay / finish_reasons.py finish_reason_to_wire   6 0 0   100%
src / lexigram / ai / relay / finish_reasons.py responses_status_from_finish   3 0 0   100%
src / lexigram / ai / relay / finish_reasons.py responses_incomplete_from_finish   4 0 0   100%
src / lexigram / ai / relay / finish_reasons.py (no function)   11 0 0   100%
src / lexigram / ai / relay / mappers / __init__.py (no function)   7 0 0   100%
src / lexigram / ai / relay / mappers / base.py FormatMapper.format   0 0 1   100%
src / lexigram / ai / relay / mappers / base.py FormatMapper.request_to_ir   0 0 1   100%
src / lexigram / ai / relay / mappers / base.py FormatMapper.ir_to_request   0 0 1   100%
src / lexigram / ai / relay / mappers / base.py FormatMapper.response_to_ir   0 0 1   100%
src / lexigram / ai / relay / mappers / base.py FormatMapper.ir_to_response   0 0 1   100%
src / lexigram / ai / relay / mappers / base.py FormatMapper.stream_to_delta   0 0 1   100%
src / lexigram / ai / relay / mappers / base.py FormatMapper.delta_to_stream   0 0 1   100%
src / lexigram / ai / relay / mappers / base.py record_loss   1 0 0   100%
src / lexigram / ai / relay / mappers / base.py warning_messages   1 0 0   100%
src / lexigram / ai / relay / mappers / base.py new_uuid   1 0 0   100%
src / lexigram / ai / relay / mappers / base.py (no function)   23 0 8   100%
src / lexigram / ai / relay / mappers / claude.py _tool_call_from_block   1 0 0   100%
src / lexigram / ai / relay / mappers / claude.py _tool_call_to_block   9 3 0   67%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper.request_to_ir   17 2 0   88%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper.ir_to_request   45 4 0   91%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper.response_to_ir   26 3 0   88%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper.ir_to_response   18 2 0   89%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper.stream_to_delta   1 0 0   100%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper.delta_to_stream   1 1 0   0%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._message_to_ir   10 2 0   80%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._assistant_to_ir   15 1 0   93%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._user_to_ir   32 3 0   91%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._image_to_part   11 6 0   45%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._system_to_ir   10 1 0   90%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._tools_to_ir   8 2 0   75%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._message_from_ir   30 3 0   90%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._content_to_blocks   17 3 0   82%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._collapse_content   3 0 0   100%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._resolve_image   6 0 0   100%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._text_from_content   3 1 0   67%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._tool_from_ir   1 0 0   100%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._thinking_from_ir   9 3 0   67%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._usage_from_wire   4 0 0   100%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._usage_to_wire   3 0 0   100%
src / lexigram / ai / relay / mappers / claude.py ClaudeMapper._stop_reason_from_ir   7 3 0   57%
src / lexigram / ai / relay / mappers / claude.py (no function)   56 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py _tool_call_from_part   4 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py _tool_call_to_part   9 3 0   67%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper.request_to_ir   15 2 0   87%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper.ir_to_request   17 2 0   88%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper.response_to_ir   38 5 0   87%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper.ir_to_response   19 2 0   89%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper.stream_to_delta   1 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper.delta_to_stream   1 1 0   0%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._system_to_ir   10 1 0   90%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._tools_to_ir   13 3 0   77%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._content_to_ir   8 2 0   75%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._assistant_to_ir   12 1 0   92%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._user_to_ir   18 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._function_to_ir   6 1 0   83%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._function_response_to_ir   5 1 0   80%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._response_format_to_ir   6 1 0   83%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._thinking_to_ir   10 7 0   30%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._content_from_ir   27 4 0   85%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._tool_name_resolver   10 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._assistant_parts_from_ir   17 2 0   88%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._attach_thought_signature   14 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._user_parts_from_ir   16 1 0   94%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._resolve_image   6 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._text_from_content   3 1 0   67%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._generation_config_from_ir   25 3 0   88%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._thinking_config_from_ir   5 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._safety_settings_from_ir   10 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._tools_from_ir   3 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._request_passthrough   1 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._upper_schema_types   10 1 0   90%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._tool_config_from_ir   15 6 0   60%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._usage_from_wire   3 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._usage_to_wire   3 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._thought_tokens   3 1 0   67%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._preserve_candidate_metadata   11 3 0   73%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._finish_reason_from_ir   7 1 0   86%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._safety_ratings_from_passthrough   4 2 0   50%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._grounding_from_passthrough   3 1 0   67%
src / lexigram / ai / relay / mappers / gemini.py GeminiMapper._prompt_feedback_from_passthrough   3 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py _config_number   4 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py _config_int   4 0 0   100%
src / lexigram / ai / relay / mappers / gemini.py (no function)   86 0 0   100%
src / lexigram / ai / relay / mappers / openai_chat.py _tool_calls_to_ir   9 0 0   100%
src / lexigram / ai / relay / mappers / openai_chat.py _tool_call_to_wire   6 2 0   67%
src / lexigram / ai / relay / mappers / openai_chat.py _extract_text   13 10 0   23%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper.request_to_ir   35 2 0   94%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper.ir_to_request   22 2 0   91%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper.response_to_ir   20 3 0   85%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper.ir_to_response   15 2 0   87%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper.stream_to_delta   1 0 0   100%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper.delta_to_stream   1 1 0   0%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper._tools_to_ir   17 4 0   76%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper._normalize_max_tokens   9 0 0   100%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper._wire_parts_to_ir   15 3 0   80%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper._message_text_to_ir   6 1 0   83%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper._reasoning_from_message   14 1 0   93%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper._usage_from_wire   8 0 0   100%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper._message_from_ir   18 1 0   94%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper._tool_from_ir   1 0 0   100%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper._stream_options_from_ir   9 1 0   89%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper._reasoning_from_ir   9 2 0   78%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper._stop_from_ir   5 1 0   80%
src / lexigram / ai / relay / mappers / openai_chat.py OpenAIChatMapper._usage_to_wire   9 1 0   89%
src / lexigram / ai / relay / mappers / openai_chat.py (no function)   52 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py _parse_arguments   9 2 0   78%
src / lexigram / ai / relay / mappers / openai_responses.py _arguments_to_wire   5 1 0   80%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper.request_to_ir   54 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper.request_to_ir.flush_tools   8 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper.ir_to_request   23 2 0   91%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper.response_to_ir   47 5 0   89%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper.ir_to_response   23 2 0   91%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper.stream_to_delta   1 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper.delta_to_stream   1 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._message_text_to_ir   1 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._input_parts_to_ir   19 3 0   84%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._message_from_item   15 1 0   93%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._tool_from_item   1 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._tool_result_from_item   4 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._reasoning_from_item   4 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._message_to_item   16 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._message_content_parts   20 1 0   95%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._tool_calls_to_items   11 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._thinking_to_items   7 7 0   0%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._tool_result_to_item   8 1 0   88%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._system_text   4 1 0   75%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._web_search_items   9 1 0   89%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._tools_to_ir   16 2 0   88%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._tool_from_ir   1 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._text_to_response_format   15 1 0   93%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._text_from_ir   16 2 0   88%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._include_from_ir   5 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._reasoning_from_ir   9 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._summary_texts   1 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._finish_from_status   12 1 0   92%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._status_from_finish   17 3 0   82%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._result_output   4 1 0   75%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._usage_from_wire   7 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py OpenAIResponsesMapper._usage_to_wire   4 0 0   100%
src / lexigram / ai / relay / mappers / openai_responses.py _incomplete_for_finish   4 4 0   0%
src / lexigram / ai / relay / mappers / openai_responses.py (no function)   74 0 0   100%
src / lexigram / ai / relay / media.py decode_data_uri   17 1 0   94%
src / lexigram / ai / relay / media.py resolve_media   15 1 0   93%
src / lexigram / ai / relay / media.py _with_field   1 0 0   100%
src / lexigram / ai / relay / media.py (no function)   14 0 0   100%
src / lexigram / ai / relay / module.py RelayModule.configure   2 0 0   100%
src / lexigram / ai / relay / module.py RelayModule.stub   2 0 0   100%
src / lexigram / ai / relay / module.py (no function)   11 0 0   100%
src / lexigram / ai / relay / quality.py route_quality   3 0 0   100%
src / lexigram / ai / relay / quality.py (no function)   6 0 0   100%
src / lexigram / ai / relay / registry.py RouteSpec.converter_id   1 0 0   100%
src / lexigram / ai / relay / registry.py Route.request_to_ir   1 0 0   100%
src / lexigram / ai / relay / registry.py Route.ir_to_request   1 0 0   100%
src / lexigram / ai / relay / registry.py Route.response_to_ir   1 0 0   100%
src / lexigram / ai / relay / registry.py Route.ir_to_response   1 0 0   100%
src / lexigram / ai / relay / registry.py Route.stream_to_delta   1 1 0   0%
src / lexigram / ai / relay / registry.py Route.delta_to_stream   1 1 0   0%
src / lexigram / ai / relay / registry.py RelayConverterRegistry.__init__   2 0 0   100%
src / lexigram / ai / relay / registry.py RelayConverterRegistry.with_defaults   6 0 0   100%
src / lexigram / ai / relay / registry.py RelayConverterRegistry.register   6 0 0   100%
src / lexigram / ai / relay / registry.py RelayConverterRegistry.mapper   6 0 0   100%
src / lexigram / ai / relay / registry.py RelayConverterRegistry.converter_routes   1 0 0   100%
src / lexigram / ai / relay / registry.py RelayConverterRegistry.mapper_ids   1 0 0   100%
src / lexigram / ai / relay / registry.py RelayConverterRegistry.converter_version   1 0 0   100%
src / lexigram / ai / relay / registry.py RelayConverterRegistry.route_quality   1 1 0   0%
src / lexigram / ai / relay / registry.py RelayConverterRegistry.route   4 1 0   75%
src / lexigram / ai / relay / registry.py RelayConverterRegistry.route_by_id   4 0 0   100%
src / lexigram / ai / relay / registry.py RelayConverterRegistry.routes   9 0 0   100%
src / lexigram / ai / relay / registry.py RelayConverterRegistry._obtain_route   11 0 0   100%
src / lexigram / ai / relay / registry.py (no function)   55 0 0   100%
src / lexigram / ai / relay / stream / __init__.py (no function)   7 0 0   100%
src / lexigram / ai / relay / stream / claude.py _claude_stop_reason   1 0 0   100%
src / lexigram / ai / relay / stream / claude.py _usage_to_wire   1 0 0   100%
src / lexigram / ai / relay / stream / claude.py _message_start   1 0 0   100%
src / lexigram / ai / relay / stream / claude.py _tool_record   1 0 0   100%
src / lexigram / ai / relay / stream / claude.py _thinking_open_pre   2 0 0   100%
src / lexigram / ai / relay / stream / claude.py _text_open_pre   1 0 0   100%
src / lexigram / ai / relay / stream / claude.py _thinking_block_index   1 0 0   100%
src / lexigram / ai / relay / stream / claude.py _text_block_index   1 0 0   100%
src / lexigram / ai / relay / stream / claude.py _thinking_reopen_index   1 1 0   0%
src / lexigram / ai / relay / stream / claude.py _text_reopen_index   1 1 0   0%
src / lexigram / ai / relay / stream / claude.py _tool_block_index   1 0 0   100%
src / lexigram / ai / relay / stream / claude.py _tool_position   4 1 0   75%
src / lexigram / ai / relay / stream / claude.py _content_block_stop   1 0 0   100%
src / lexigram / ai / relay / stream / claude.py _close_open   13 0 0   100%
src / lexigram / ai / relay / stream / claude.py _thinking_signature   2 0 0   100%
src / lexigram / ai / relay / stream / claude.py _text_events   15 4 0   73%
src / lexigram / ai / relay / stream / claude.py _thinking_events   19 4 0   79%
src / lexigram / ai / relay / stream / claude.py _tool_events   17 2 0   88%
src / lexigram / ai / relay / stream / claude.py _finish_events   7 0 0   100%
src / lexigram / ai / relay / stream / claude.py _usage_events   1 0 0   100%
src / lexigram / ai / relay / stream / claude.py claude_emitter   34 3 0   91%
src / lexigram / ai / relay / stream / claude.py (no function)   32 0 0   100%
src / lexigram / ai / relay / stream / gemini.py _gemini_finish_reason   1 0 0   100%
src / lexigram / ai / relay / stream / gemini.py _usage_to_wire   1 0 0   100%
src / lexigram / ai / relay / stream / gemini.py _zero_usage   1 0 0   100%
src / lexigram / ai / relay / stream / gemini.py _chunk   2 0 0   100%
src / lexigram / ai / relay / stream / gemini.py _terminal_usage   3 0 0   100%
src / lexigram / ai / relay / stream / gemini.py _function_call_parts   9 2 0   78%
src / lexigram / ai / relay / stream / gemini.py gemini_emitter   24 2 0   92%
src / lexigram / ai / relay / stream / gemini.py (no function)   19 0 0   100%
src / lexigram / ai / relay / stream / openai_chat.py _chunk   1 0 0   100%
src / lexigram / ai / relay / stream / openai_chat.py _usage_to_wire   6 1 0   83%
src / lexigram / ai / relay / stream / openai_chat.py _zero_usage_wire   1 0 0   100%
src / lexigram / ai / relay / stream / openai_chat.py _identity   3 0 0   100%
src / lexigram / ai / relay / stream / openai_chat.py _emit   2 0 0   100%
src / lexigram / ai / relay / stream / openai_chat.py _choice   1 0 0   100%
src / lexigram / ai / relay / stream / openai_chat.py _tool_call_fragment   19 2 0   89%
src / lexigram / ai / relay / stream / openai_chat.py openai_chat_emitter   40 6 0   85%
src / lexigram / ai / relay / stream / openai_chat.py (no function)   19 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _base   1 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _msg_id   1 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _reason_id   1 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _fc_id   1 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _msg_index   1 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _fc_index   1 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _message_item   1 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _message_item_in_progress   1 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _reasoning_item   2 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _fc_item   1 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _full_output   8 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _created   1 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _in_progress   1 1 0   0%
src / lexigram / ai / relay / stream / openai_responses.py _usage_to_wire   3 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _position   4 1 0   75%
src / lexigram / ai / relay / stream / openai_responses.py _text_events   10 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py _thinking_events   9 1 0   89%
src / lexigram / ai / relay / stream / openai_responses.py _tool_events   14 2 0   86%
src / lexigram / ai / relay / stream / openai_responses.py _finish_events   19 0 0   100%
src / lexigram / ai / relay / stream / openai_responses.py openai_responses_emitter   38 10 0   74%
src / lexigram / ai / relay / stream / openai_responses.py (no function)   32 0 0   100%
src / lexigram / ai / relay / stream / state.py _pre_text   3 0 0   100%
src / lexigram / ai / relay / stream / state.py _pre_thinking   3 0 0   100%
src / lexigram / ai / relay / stream / state.py _first_tool_contribution   12 2 0   83%
src / lexigram / ai / relay / stream / state.py _pre_tool_indices   5 0 0   100%
src / lexigram / ai / relay / stream / state.py _started_pre   13 3 0   77%
src / lexigram / ai / relay / stream / state.py StreamNormalizer.__call__   0 0 1   100%
src / lexigram / ai / relay / stream / state.py StreamEmitter.__call__   0 0 1   100%
src / lexigram / ai / relay / stream / state.py StreamSession.__init__   21 0 0   100%
src / lexigram / ai / relay / stream / state.py StreamSession.accept   17 0 0   100%
src / lexigram / ai / relay / stream / state.py StreamSession.finalize   12 0 0   100%
src / lexigram / ai / relay / stream / state.py StreamSession.snapshot   1 0 0   100%
src / lexigram / ai / relay / stream / state.py StreamSession._stream_state   1 0 0   100%
src / lexigram / ai / relay / stream / state.py StreamSession.record_loss   3 0 0   100%
src / lexigram / ai / relay / stream / state.py StreamSession._thinking_text   1 0 0   100%
src / lexigram / ai / relay / stream / state.py StreamSession._tool_call_order   1 0 0   100%
src / lexigram / ai / relay / stream / state.py StreamSession._apply   39 1 0   97%
src / lexigram / ai / relay / stream / state.py StreamSession._emit   4 1 0   75%
src / lexigram / ai / relay / stream / state.py (no function)   58 0 4   100%
Total     2709 251 23   91%

No items found using the specified filter.