33from fastapi import APIRouter , Request , status
44from fastapi .responses import JSONResponse
55
6- from server .form_types import IntForm , OptStrForm , StrForm
7- from server .models import IngestErrorResponse , IngestRequest , IngestSuccessResponse , PatternType
6+ from server .models import IngestErrorResponse , IngestRequest , IngestSuccessResponse
87from server .query_processor import process_query
98from server .server_utils import limiter
109
2120)
2221@limiter .limit ("10/minute" )
2322async def api_ingest (
24- request : Request , # noqa: ARG001 (unused) pylint: disable=unused-argument
25- input_text : StrForm ,
26- max_file_size : IntForm ,
27- pattern_type : StrForm = "exclude" ,
28- pattern : StrForm = "" ,
29- token : OptStrForm = None ,
23+ request : Request , # noqa: ARG001
24+ ingest_request : IngestRequest ,
3025) -> JSONResponse :
3126 """Ingest a Git repository and return processed content.
3227
33- This endpoint processes a Git repository by cloning it, analyzing its structure,
28+ ** This endpoint processes a Git repository by cloning it, analyzing its structure,**
3429 and returning a summary with the repository's content. The response includes
3530 file tree structure, processed content, and metadata about the ingestion.
3631
37- Parameters
38- ----------
39- request : Request
40- FastAPI request object
41- input_text : StrForm
42- Git repository URL or slug to ingest
43- max_file_size : IntForm
44- Maximum file size slider position (0-500) for filtering files
45- pattern_type : StrForm
46- Type of pattern to use for file filtering ("include" or "exclude")
47- pattern : StrForm
48- Glob/regex pattern string for file filtering
49- token : OptStrForm
50- GitHub personal access token (PAT) for accessing private repositories
32+ **Parameters**
5133
52- Returns
53- -------
54- JSONResponse
55- Success response with ingestion results or error response with appropriate HTTP status code
34+ - **ingest_request** (`IngestRequest`): Pydantic model containing ingestion parameters
5635
57- """
58- try :
59- # Validate input using Pydantic model
60- ingest_request = IngestRequest (
61- input_text = input_text ,
62- max_file_size = max_file_size ,
63- pattern_type = PatternType (pattern_type ),
64- pattern = pattern ,
65- token = token ,
66- )
36+ **Returns**
6737
38+ - **JSONResponse**: Success response with ingestion results or error response with appropriate HTTP status code
39+
40+ """ # pylint: disable=unused-argument
41+ try :
6842 result = await process_query (
6943 input_text = ingest_request .input_text ,
7044 slider_position = ingest_request .max_file_size ,
@@ -90,7 +64,7 @@ async def api_ingest(
9064 # Handle validation errors with 400 status code
9165 error_response = IngestErrorResponse (
9266 error = f"Validation error: { ve !s} " ,
93- repo_url = input_text ,
67+ repo_url = ingest_request . input_text ,
9468 )
9569 return JSONResponse (
9670 status_code = status .HTTP_400_BAD_REQUEST ,
@@ -101,7 +75,7 @@ async def api_ingest(
10175 # Handle unexpected errors with 500 status code
10276 error_response = IngestErrorResponse (
10377 error = f"Internal server error: { exc !s} " ,
104- repo_url = input_text ,
78+ repo_url = ingest_request . input_text ,
10579 )
10680 return JSONResponse (
10781 status_code = status .HTTP_500_INTERNAL_SERVER_ERROR ,
0 commit comments