MCPcopy Create free account
hub / github.com/Nativu5/Gemini-FastAPI / create_chat_completion

Function create_chat_completion

app/server/chat.py:1757–1934  ·  view source on GitHub ↗
(
    request: ChatCompletionRequest,
    raw_request: Request,
    api_key: str = Depends(verify_api_key),
    tmp_dir: Path = Depends(get_temp_dir),
    image_store: Path = Depends(get_image_store_dir),
)

Source from the content-addressed store, hash-verified

1755
1756@router.post("/v1/chat/completions")
1757async def create_chat_completion(
1758 request: ChatCompletionRequest,
1759 raw_request: Request,
1760 api_key: str = Depends(verify_api_key),
1761 tmp_dir: Path = Depends(get_temp_dir),
1762 image_store: Path = Depends(get_image_store_dir),
1763):
1764 base_url = str(raw_request.base_url)
1765 pool, db = GeminiClientPool(), LMDBConversationStore()
1766 try:
1767 model = _get_model_by_name(request.model)
1768 except ValueError as exc:
1769 raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)) from exc
1770 if not request.messages:
1771 raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Messages required.")
1772
1773 structured_requirement = _build_structured_requirement(request.response_format)
1774 extra_instr = [structured_requirement.instruction] if structured_requirement else None
1775
1776 # This ensures that server-injected system instructions are part of the history
1777 msgs = _prepare_messages_for_model(
1778 request.messages,
1779 request.tools,
1780 request.tool_choice,
1781 extra_instr,
1782 )
1783
1784 session, client, remain = await _find_reusable_session(db, pool, model, msgs)
1785 reused_session = session is not None
1786 use_google_temporary_mode = g_config.gemini.chat_mode == ChatMode.TEMPORARY
1787
1788 if session:
1789 if not remain:
1790 raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="No new messages.")
1791
1792 # For reused sessions, we only need to process the remaining messages.
1793 # We don't re-inject system defaults to avoid duplicating instructions already in history.
1794 input_msgs = _prepare_messages_for_model(
1795 remain,
1796 request.tools,
1797 request.tool_choice,
1798 extra_instr,
1799 False,
1800 )
1801 m_input, files = await _process_conversation_with_compaction(
1802 input_msgs,
1803 tmp_dir,
1804 allow_summary_compaction=use_google_temporary_mode and (g_config.gemini.oversized_context_strategy == OversizedContextStrategy.COMPACTION),
1805 reason="temporary session replay",
1806 )
1807
1808 logger.debug(
1809 f"Reused session {reprlib.repr(session.metadata)} - sending {len(input_msgs)} prepared messages."
1810 )
1811 else:
1812 try:
1813 client = await pool.acquire()
1814 session = client.start_chat(model=model)

Callers

nothing calls this directly

Calls 15

GeminiClientPoolClass · 0.90
get_image_tokenFunction · 0.90
_get_model_by_nameFunction · 0.85
_find_reusable_sessionFunction · 0.85
_process_llm_outputFunction · 0.85
_image_to_base64Function · 0.85

Tested by

no test coverage detected