@@ -22,6 +22,7 @@ inference provider, based on integration test results.
2222| Provider | Tested | Passing | Failing | Coverage |
2323| ----------| --------| ---------| ---------| ----------|
2424| azure | 89 | 89 | 0 | 86% |
25+ | ollama | 88 | 88 | 0 | 85% |
2526| openai | 104 | 104 | 0 | 100% |
2627| vllm | 1 | 1 | 0 | 1% |
2728
@@ -32,167 +33,168 @@ Models, endpoints, and versions used during test recordings.
3233| Provider | Model(s) | Endpoint | Version Info |
3334| ----------| ----------| ----------| --------------|
3435| azure | gpt-4o | lls-test.openai.azure.com | — |
36+ | ollama | llama3.2:3b-instruct-fp16 | — | openai sdk: 2.5.0 |
3537| openai | gpt-4o, text-embedding-3-small | api.openai.com | openai sdk: 2.5.0 |
3638| vllm | Qwen/Qwen3-0.6B | — | — |
3739
3840## Basic Responses
3941
40- | Feature | azure | openai | vllm |
41- | --- | --- | --- | --- |
42- | extra body guided choice | ✅ | ✅ | — |
43- | include logprobs non streaming | ✅ | ✅ | — |
44- | include logprobs streaming | ✅ | ✅ | — |
45- | include logprobs with function tools | ✅ | ✅ | — |
46- | include logprobs with web search | ✅ | ✅ | — |
47- | non streaming basic | ✅ | ✅ | — |
48- | non streaming image | ✅ | ✅ | — |
49- | non streaming multi turn | ✅ | ✅ | — |
50- | non streaming multi turn image | ✅ | ✅ | — |
51- | streaming basic | ✅ | ✅ | — |
52- | streaming incremental content | ✅ | ✅ | — |
42+ | Feature | azure | ollama | openai | vllm |
43+ | --- | --- | --- | --- | --- |
44+ | extra body guided choice | ✅ | ⏭️ | ✅ | — |
45+ | include logprobs non streaming | ✅ | ⏭️ | ✅ | — |
46+ | include logprobs streaming | ✅ | ⏭️ | ✅ | — |
47+ | include logprobs with function tools | ✅ | ⏭️ | ✅ | — |
48+ | include logprobs with web search | ✅ | ⏭️ | ✅ | — |
49+ | non streaming basic | ✅ | ✅ | ✅ | — |
50+ | non streaming image | ✅ | ✅ | ✅ | — |
51+ | non streaming multi turn | ✅ | ✅ | ✅ | — |
52+ | non streaming multi turn image | ✅ | ✅ | ✅ | — |
53+ | streaming basic | ✅ | ✅ | ✅ | — |
54+ | streaming incremental content | ✅ | ✅ | ✅ | — |
5355
5456## Conversation Responses
5557
56- | Feature | azure | openai | vllm |
57- | --- | --- | --- | --- |
58- | conversation backward compatibility | ✅ | ✅ | — |
59- | conversation basic workflow | ✅ | ✅ | — |
60- | conversation context loading | ✅ | ✅ | — |
61- | conversation error handling | ⏭️ | ✅ | — |
62- | conversation multi turn and streaming | ✅ | ✅ | — |
58+ | Feature | azure | ollama | openai | vllm |
59+ | --- | --- | --- | --- | --- |
60+ | conversation backward compatibility | ✅ | ✅ | ✅ | — |
61+ | conversation basic workflow | ✅ | ✅ | ✅ | — |
62+ | conversation context loading | ✅ | ✅ | ✅ | — |
63+ | conversation error handling | ⏭️ | ⏭️ | ✅ | — |
64+ | conversation multi turn and streaming | ✅ | ✅ | ✅ | — |
6365
6466## File Search
6567
66- | Feature | azure | openai | vllm |
67- | --- | --- | --- | --- |
68- | file search filter by category | ✅ | ✅ | — |
69- | file search filter by date range | ✅ | ✅ | — |
70- | file search filter by region | ✅ | ✅ | — |
71- | file search filter compound and | ✅ | ✅ | — |
72- | file search filter compound or | ✅ | ✅ | — |
73- | file search streaming events | ✅ | ✅ | — |
74- | text format | ✅ | ✅ | — |
68+ | Feature | azure | ollama | openai | vllm |
69+ | --- | --- | --- | --- | --- |
70+ | file search filter by category | ✅ | ✅ | ✅ | — |
71+ | file search filter by date range | ✅ | ✅ | ✅ | — |
72+ | file search filter by region | ✅ | ✅ | ✅ | — |
73+ | file search filter compound and | ✅ | ✅ | ✅ | — |
74+ | file search filter compound or | ✅ | ✅ | ✅ | — |
75+ | file search streaming events | ✅ | ✅ | ✅ | — |
76+ | text format | ✅ | ✅ | ✅ | — |
7577
7678## Mcp Authentication
7779
78- | Feature | azure | openai | vllm |
79- | --- | --- | --- | --- |
80- | mcp authorization backward compatibility | ✅ | ✅ | — |
81- | mcp authorization bearer | ✅ | ✅ | — |
80+ | Feature | azure | ollama | openai | vllm |
81+ | --- | --- | --- | --- | --- |
82+ | mcp authorization backward compatibility | ✅ | ✅ | ✅ | — |
83+ | mcp authorization bearer | ✅ | ✅ | ✅ | — |
8284
8385## Openai Responses
8486
85- | Feature | azure | openai | vllm |
86- | --- | --- | --- | --- |
87- | background false is synchronous | ✅ | ✅ | — |
88- | background returns queued | ✅ | ✅ | — |
89- | streaming invalid base64 image failure code is spec compliant | ✅ | ✅ | — |
90- | with max output tokens | ✅ | ✅ | — |
91- | with parallel tool calls and previous response | ✅ | ✅ | — |
92- | with parallel tool calls disabled | ✅ | ✅ | — |
93- | with parallel tool calls disabled streaming | ✅ | ✅ | — |
94- | with parallel tool calls enabled | ✅ | ✅ | — |
95- | with prompt cache key | ✅ | ✅ | — |
96- | with prompt cache key and previous response | ✅ | ✅ | — |
97- | with prompt cache key streaming | ✅ | ✅ | — |
98- | with safety identifier | ✅ | ✅ | — |
99- | with safety identifier and previous response | ✅ | ✅ | — |
100- | with safety identifier streaming | ✅ | ✅ | — |
101- | with service tier | ⏭️ | ✅ | — |
102- | with service tier and previous response | ⏭️ | ✅ | — |
103- | with service tier auto | ⏭️ | ✅ | — |
104- | with service tier auto and previous response | ⏭️ | ✅ | — |
105- | with service tier auto streaming | ⏭️ | ✅ | — |
106- | with service tier flex | ⏭️ | ✅ | — |
107- | with service tier flex streaming | ⏭️ | ✅ | — |
108- | with service tier streaming | ⏭️ | ✅ | — |
109- | with small max output tokens | ✅ | ✅ | — |
110- | with top p | ✅ | ✅ | — |
111- | with top p and previous response | ✅ | ✅ | — |
112- | with top p streaming | ✅ | ✅ | — |
113- | with truncation and previous response | ✅ | ✅ | — |
114- | with truncation disabled | ✅ | ✅ | — |
115- | with truncation disabled streaming | ✅ | ✅ | — |
87+ | Feature | azure | ollama | openai | vllm |
88+ | --- | --- | --- | --- | --- |
89+ | background false is synchronous | ✅ | ✅ | ✅ | — |
90+ | background returns queued | ✅ | ✅ | ✅ | — |
91+ | streaming invalid base64 image failure code is spec compliant | ✅ | ✅ | ✅ | — |
92+ | with max output tokens | ✅ | ✅ | ✅ | — |
93+ | with parallel tool calls and previous response | ✅ | ✅ | ✅ | — |
94+ | with parallel tool calls disabled | ✅ | ✅ | ✅ | — |
95+ | with parallel tool calls disabled streaming | ✅ | ✅ | ✅ | — |
96+ | with parallel tool calls enabled | ✅ | ✅ | ✅ | — |
97+ | with prompt cache key | ✅ | ✅ | ✅ | — |
98+ | with prompt cache key and previous response | ✅ | ✅ | ✅ | — |
99+ | with prompt cache key streaming | ✅ | ✅ | ✅ | — |
100+ | with safety identifier | ✅ | ✅ | ✅ | — |
101+ | with safety identifier and previous response | ✅ | ✅ | ✅ | — |
102+ | with safety identifier streaming | ✅ | ✅ | ✅ | — |
103+ | with service tier | ⏭️ | ✅ | ✅ | — |
104+ | with service tier and previous response | ⏭️ | ✅ | ✅ | — |
105+ | with service tier auto | ⏭️ | ✅ | ✅ | — |
106+ | with service tier auto and previous response | ⏭️ | ✅ | ✅ | — |
107+ | with service tier auto streaming | ⏭️ | ✅ | ✅ | — |
108+ | with service tier flex | ⏭️ | ✅ | ✅ | — |
109+ | with service tier flex streaming | ⏭️ | ✅ | ✅ | — |
110+ | with service tier streaming | ⏭️ | ✅ | ✅ | — |
111+ | with small max output tokens | ✅ | ✅ | ✅ | — |
112+ | with top p | ✅ | ✅ | ✅ | — |
113+ | with top p and previous response | ✅ | ✅ | ✅ | — |
114+ | with top p streaming | ✅ | ✅ | ✅ | — |
115+ | with truncation and previous response | ✅ | ✅ | ✅ | — |
116+ | with truncation disabled | ✅ | ✅ | ✅ | — |
117+ | with truncation disabled streaming | ✅ | ✅ | ✅ | — |
116118
117119## Prompt Templates
118120
119- | Feature | azure | openai | vllm |
120- | --- | --- | --- | --- |
121- | basic prompt template | ✅ | ✅ | — |
122- | multi variable prompt template | ✅ | ✅ | — |
123- | multi version prompt template | ✅ | ✅ | — |
124- | prompt template no variables | ✅ | ✅ | — |
125- | prompt template with multi turn | ✅ | ✅ | — |
126- | prompt template with streaming | ✅ | ✅ | — |
121+ | Feature | azure | ollama | openai | vllm |
122+ | --- | --- | --- | --- | --- |
123+ | basic prompt template | ✅ | ✅ | ✅ | — |
124+ | multi variable prompt template | ✅ | ✅ | ✅ | — |
125+ | multi version prompt template | ✅ | ✅ | ✅ | — |
126+ | prompt template no variables | ✅ | ✅ | ✅ | — |
127+ | prompt template with multi turn | ✅ | ✅ | ✅ | — |
128+ | prompt template with streaming | ✅ | ✅ | ✅ | — |
127129
128130## Reasoning
129131
130- | Feature | azure | openai | vllm |
131- | --- | --- | --- | --- |
132- | reasoning basic streaming | ✅ | ✅ | ✅ |
132+ | Feature | azure | ollama | openai | vllm |
133+ | --- | --- | --- | --- | --- |
134+ | reasoning basic streaming | ✅ | ✅ | ✅ | ✅ |
133135
134136## Responses Access Control
135137
136- | Feature | azure | openai | vllm |
137- | --- | --- | --- | --- |
138- | previous response id access control | — | ✅ | — |
139- | user can access own resources after denial | — | ✅ | — |
140- | user cannot access other users response input items | — | ✅ | — |
141- | user cannot delete other users response | — | ✅ | — |
142- | user cannot retrieve other users response | — | ✅ | — |
143- | users have isolated responses | — | ✅ | — |
138+ | Feature | azure | ollama | openai | vllm |
139+ | --- | --- | --- | --- | --- |
140+ | previous response id access control | — | — | ✅ | — |
141+ | user can access own resources after denial | — | — | ✅ | — |
142+ | user cannot access other users response input items | — | — | ✅ | — |
143+ | user cannot delete other users response | — | — | ✅ | — |
144+ | user cannot retrieve other users response | — | — | ✅ | — |
145+ | users have isolated responses | — | — | ✅ | — |
144146
145147## Responses Errors
146148
147- | Feature | azure | openai | vllm |
148- | --- | --- | --- | --- |
149- | completed response has no error | ✅ | ✅ | — |
150- | invalid base64 image returns image error | ✅ | ✅ | — |
151- | invalid image url returns image error | ✅ | ✅ | — |
152- | non vision model returns error for image input | ✅ | ✅ | — |
153- | non vision model with base64 image returns server error | ✅ | ✅ | — |
149+ | Feature | azure | ollama | openai | vllm |
150+ | --- | --- | --- | --- | --- |
151+ | completed response has no error | ✅ | ✅ | ✅ | — |
152+ | invalid base64 image returns image error | ✅ | ⏭️ | ✅ | — |
153+ | invalid image url returns image error | ✅ | ⏭️ | ✅ | — |
154+ | non vision model returns error for image input | ✅ | ⏭️ | ✅ | — |
155+ | non vision model with base64 image returns server error | ✅ | ✅ | ✅ | — |
154156
155157## Structured Output
156158
157- | Feature | azure | openai | vllm |
158- | --- | --- | --- | --- |
159- | json schema array of integers | ✅ | ✅ | — |
160- | json schema array of objects | ✅ | ✅ | — |
161- | json schema array of strings | ✅ | ✅ | — |
162- | json schema boolean types | ✅ | ✅ | — |
163- | json schema float types | ✅ | ✅ | — |
164- | json schema integer types | ✅ | ✅ | — |
165- | json schema mixed types structures | ✅ | ✅ | — |
166- | json schema nested objects | ✅ | ✅ | — |
167- | json schema string types | ✅ | ✅ | — |
159+ | Feature | azure | ollama | openai | vllm |
160+ | --- | --- | --- | --- | --- |
161+ | json schema array of integers | ✅ | ✅ | ✅ | — |
162+ | json schema array of objects | ✅ | ✅ | ✅ | — |
163+ | json schema array of strings | ✅ | ✅ | ✅ | — |
164+ | json schema boolean types | ✅ | ✅ | ✅ | — |
165+ | json schema float types | ✅ | ✅ | ✅ | — |
166+ | json schema integer types | ✅ | ✅ | ✅ | — |
167+ | json schema mixed types structures | ✅ | ✅ | ✅ | — |
168+ | json schema nested objects | ✅ | ✅ | ✅ | — |
169+ | json schema string types | ✅ | ✅ | ✅ | — |
168170
169171## Tool Responses
170172
171- | Feature | azure | openai | vllm |
172- | --- | --- | --- | --- |
173- | connector resolution mcp tool | ✅ | ✅ | — |
174- | function call ordering 1 | ✅ | ✅ | — |
175- | function call ordering 2 | ✅ | ✅ | — |
176- | function call output list file | ✅ | ✅ | — |
177- | function call output list image | ✅ | ✅ | — |
178- | function call output list text | ✅ | ✅ | — |
179- | function call output list text multi block | ✅ | ✅ | — |
180- | max tool calls with function tools | ✅ | ✅ | — |
181- | max tool calls with mcp tools | ✅ | ✅ | — |
182- | mcp tool approval | ✅ | ✅ | — |
183- | multi turn streaming web search | ✅ | ✅ | — |
184- | non streaming custom tool | ✅ | ✅ | — |
185- | non streaming file search | ✅ | ✅ | — |
186- | non streaming file search empty vector store | ✅ | ✅ | — |
187- | non streaming mcp tool | ✅ | ✅ | — |
188- | non streaming multi turn tool execution | ✅ | ✅ | — |
189- | non streaming web search | ✅ | ✅ | — |
190- | parallel tool calls with function tools | ✅ | ✅ | — |
191- | parallel tool calls with mcp tools | ✅ | ✅ | — |
192- | sequential file search | ✅ | ✅ | — |
193- | sequential mcp tool | ✅ | ✅ | — |
194- | streaming multi turn tool execution | ✅ | ✅ | — |
195- | streaming web search | ✅ | ✅ | — |
173+ | Feature | azure | ollama | openai | vllm |
174+ | --- | --- | --- | --- | --- |
175+ | connector resolution mcp tool | ✅ | ✅ | ✅ | — |
176+ | function call ordering 1 | ✅ | ✅ | ✅ | — |
177+ | function call ordering 2 | ✅ | ✅ | ✅ | — |
178+ | function call output list file | ✅ | ✅ | ✅ | — |
179+ | function call output list image | ✅ | ⏭️ | ✅ | — |
180+ | function call output list text | ✅ | ✅ | ✅ | — |
181+ | function call output list text multi block | ✅ | ✅ | ✅ | — |
182+ | max tool calls with function tools | ✅ | ✅ | ✅ | — |
183+ | max tool calls with mcp tools | ✅ | ✅ | ✅ | — |
184+ | mcp tool approval | ✅ | ✅ | ✅ | — |
185+ | multi turn streaming web search | ✅ | ✅ | ✅ | — |
186+ | non streaming custom tool | ✅ | ✅ | ✅ | — |
187+ | non streaming file search | ✅ | ✅ | ✅ | — |
188+ | non streaming file search empty vector store | ✅ | ✅ | ✅ | — |
189+ | non streaming mcp tool | ✅ | ✅ | ✅ | — |
190+ | non streaming multi turn tool execution | ✅ | ✅ | ✅ | — |
191+ | non streaming web search | ✅ | ✅ | ✅ | — |
192+ | parallel tool calls with function tools | ✅ | ✅ | ✅ | — |
193+ | parallel tool calls with mcp tools | ✅ | ✅ | ✅ | — |
194+ | sequential file search | ✅ | ✅ | ✅ | — |
195+ | sequential mcp tool | ✅ | ✅ | ✅ | — |
196+ | streaming multi turn tool execution | ✅ | ✅ | ✅ | — |
197+ | streaming web search | ✅ | ✅ | ✅ | — |
196198
197199---
198200
0 commit comments