Start with relevant experience, not the size of the portfolio. Ask to see two or three projects that resemble your domain and your stack, and then ask who actually wrote that code. A solid partner is happy to connect you with the people who would work on your project. Evasive answers at this stage generally mean the demo work came from somewhere else.
The contract deserves more attention than the sales deck. A few clauses carry most of the weight: assignment of intellectual property, confidentiality, and exit terms and handover. Every artifact has to transfer to you once invoices are settled, including source code, designs and infrastructure as code. Be careful with wording that leaves so-called reusable libraries outside the transfer, since this is frequently the part you cannot replace later.
Find out how the estimate was built. A serious estimate arrives with the assumptions behind it, a breakdown per feature and a range rather than a single number. A fixed price is only reasonable when the scope is genuinely frozen; when the scope is still moving the supplier prices the risk in and you pay for uncertainty either way. Time and materials puts the risk on your side, so it requires a cap, regular demos and transparent reporting.
The delivery process matters more than team size. Establish how change requests are handled, who writes the acceptance criteria and how quality assurance works. A well-run team should be able to demonstrate running software rather than status reports. Acceptance criteria in writing remain the only reliable protection against an argument at delivery time.
Finally, consider the day you no longer need this vendor while the relationship is still good. Insist that the source repository stays in your organisation from the first commit, vue js or angular and that documentation is updated as part of the work. A provider confident in its own work says yes immediately; a long negotiation over it says most of what is rag and langchain you need to know.