Python Interview Task
Scenario
You are asked to build a Python web API that analyzes plain text transcripts and returns a summary along with a list of next actions. Your implementation should clearly demonstrate good architectural practices.
Provided Adapter (do not implement)
- OpenAI Adapter: Sends the transcript text to OpenAI's API along with a predefined, hardcoded prompt. This adapter returns a DTO.
- The transcript, system prompt, and user prompt are provided.
A file defining the interface (ports) for this adapter will be provided.
Requirements (Point 1)
Analyze Transcript
- Create an HTTP endpoint (e.g., using FastAPI or Flask) that accepts GET requests containing a plain text transcript.
- Perform basic input validation (when the transcript is empty)
- Invoke the provided OpenAI adapter to analyze the transcript.
- Store the analysis result in memory (an external DB is not required).
- Return a response containing:
- A unique ID.
- A summary of the transcript.
- A suggested list of next steps or actions based on the transcript analysis.
Get a Transcript by ID
- Create an HTTP endpoint to get transcript analysis by ID.
Additional Requirements
- Adhere strictly to the interfaces defined in the provided ports file.
Optional Advanced Requirements (Point 2)
- Build an additional endpoint to support concurrent analysis of multiple transcripts within a single request:
- Implement asynchronous processing (e.g., using asyncio).
- Handle multiple transcript analyses simultaneously without blocking the main API thread.
Success Criteria
- Code readability, modularity, and adherence to best practices.
- Functional correctness of the API.
- Swagger
- Clear error handling and appropriate HTTP response statuses.
- Testability of the code (clear separation of concerns, ease of unit testing).
- (Optional) Effective asynchronous processing implementation.
Hints
- You will find a test running openai adapter. This will be the documentation to build the prompt to analyze the transcript
- The provided OpenAI adapter utilizes structured output, allowing you to specify a system prompt, a user prompt, and a DTO. The adapter then returns a model instance populated according to the DTO's defined structure.
- Create a DTO that contains the requested fields.
- Hexagonal (or clean) architecture consists of distinct layers. Consider creating a separate model layer for the LLM responses. Pay attention to avoiding layer coupling.