Skip to content

Commit 3df93cc

Browse files
committed
docs
1 parent ae29cc2 commit 3df93cc

File tree

96 files changed

+661
-784
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+661
-784
lines changed
140 KB
Loading

docs-build/packages.mdx

Lines changed: 1 addition & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -20,48 +20,7 @@ Instructor is built on a modular architecture. If you need to work at a lower le
2020

2121
### The Stack
2222

23-
```
24-
┌─────────────────────────────────────────────────────────┐
25-
│ YOUR APPLICATION │
26-
└───────────────────────────┬─────────────────────────────┘
27-
28-
┌───────────────────────────▼─────────────────────────────┐
29-
│ INSTRUCTOR │
30-
│ │
31-
│ • Define a PHP class │
32-
│ • Get a validated object back │
33-
│ • Automatic retries with LLM feedback │
34-
│ │
35-
│ composer require cognesy/instructor-php │
36-
└───────────────────────────┬─────────────────────────────┘
37-
38-
┌───────────────────────────▼─────────────────────────────┐
39-
│ POLYGLOT │
40-
│ │
41-
│ • One API for 20+ LLM providers │
42-
│ • Swap OpenAI ↔ Claude ↔ Gemini with one line │
43-
│ • Embeddings, streaming, tool calling │
44-
│ │
45-
│ composer require cognesy/polyglot │
46-
└───────────────────────────┬─────────────────────────────┘
47-
48-
┌───────────────────────────▼─────────────────────────────┐
49-
│ HTTP CLIENT │
50-
│ │
51-
│ • Streaming-first HTTP layer │
52-
│ • Connection pooling, middleware │
53-
│ • Multiple backends (Guzzle, Symfony, native) │
54-
│ │
55-
│ composer require cognesy/http-client │
56-
└───────────────────────────┬─────────────────────────────┘
57-
58-
┌───────────────────────────▼─────────────────────────────┐
59-
│ LLM PROVIDER APIs │
60-
│ │
61-
│ OpenAI • Anthropic • Google • Mistral • Cohere │
62-
│ Groq • Fireworks • Together • Ollama • Azure • ... │
63-
└─────────────────────────────────────────────────────────┘
64-
```
23+
![Instructor Stack](images/instructor-diagram.png)
6524

6625
---
6726

docs-build/packages/http/1-overview.mdx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ HttpClient
9494
└── withRequest() - Create pending request for execution
9595
└── pool() - Execute multiple requests concurrently
9696
└── withPool() - Create pending pool for deferred execution
97-
// @doctest id="e305"
97+
// @doctest id="e2ad"
9898
```
9999

100100
### Middleware Layer
@@ -105,7 +105,7 @@ The middleware system allows for processing requests and responses through a cha
105105
Request -> Middleware 1 -> Middleware 2 -> ... -> Driver -> External API
106106
107107
Response <- Middleware 1 <- Middleware 2 <- ... <- Driver <- HTTP Response
108-
// @doctest id="1616"
108+
// @doctest id="c09e"
109109
```
110110

111111
Key components:
@@ -123,7 +123,7 @@ CanHandleHttpRequest (interface)
123123
├── SymfonyDriver
124124
├── LaravelDriver
125125
└── MockHttpDriver (for testing)
126-
// @doctest id="1d8e"
126+
// @doctest id="b3cb"
127127
```
128128

129129
### Adapter Layer
@@ -136,7 +136,7 @@ HttpResponse (interface)
136136
├── SymfonyHttpResponse
137137
├── LaravelHttpResponse
138138
└── MockHttpResponse
139-
// @doctest id="b50b"
139+
// @doctest id="c647"
140140
```
141141

142142
## Supported HTTP Clients

docs-build/packages/http/10-middleware.mdx

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ interface HttpMiddleware
3434
{
3535
public function handle(HttpClientRequest $request, CanHandleHttpRequest $next): HttpResponse;
3636
}
37-
// @doctest id="fe92"
37+
// @doctest id="8954"
3838
```
3939

4040
The `handle` method takes two parameters:
@@ -85,7 +85,7 @@ abstract class BaseMiddleware implements HttpMiddleware
8585
return $response;
8686
}
8787
}
88-
// @doctest id="6971"
88+
// @doctest id="0bfc"
8989
```
9090

9191
By extending `BaseMiddleware`, you only need to override the methods relevant to your middleware's functionality, making the code more focused and maintainable.
@@ -120,7 +120,7 @@ $client->withMiddleware(
120120
new RetryMiddleware(),
121121
new TimeoutMiddleware()
122122
);
123-
// @doctest id="88db"
123+
// @doctest id="b144"
124124
```
125125

126126
Named middleware are useful when you need to reference them later, for example, to remove or replace them.
@@ -132,7 +132,7 @@ You can remove middleware from the stack by name:
132132
```php
133133
// Remove a middleware by name
134134
$client->middleware()->remove('cache');
135-
// @doctest id="bfad"
135+
// @doctest id="8268"
136136
```
137137

138138
### Replacing Middleware
@@ -142,7 +142,7 @@ You can replace a middleware with another one:
142142
```php
143143
// Replace a middleware with a new one
144144
$client->middleware()->replace('cache', new ImprovedCachingMiddleware());
145-
// @doctest id="14ab"
145+
// @doctest id="2cea"
146146
```
147147

148148
### Clearing Middleware
@@ -152,7 +152,7 @@ You can remove all middleware from the stack:
152152
```php
153153
// Clear all middleware
154154
$client->middleware()->clear();
155-
// @doctest id="95f9"
155+
// @doctest id="c445"
156156
```
157157

158158
### Checking Middleware
@@ -164,7 +164,7 @@ You can check if a middleware exists in the stack:
164164
if ($client->middleware()->has('rate-limit')) {
165165
// The 'rate-limit' middleware exists
166166
}
167-
// @doctest id="39b3"
167+
// @doctest id="50ab"
168168
```
169169

170170
### Getting Middleware
@@ -177,7 +177,7 @@ $rateLimitMiddleware = $client->middleware()->get('rate-limit');
177177

178178
// Get a middleware by index
179179
$firstMiddleware = $client->middleware()->get(0);
180-
// @doctest id="d33f"
180+
// @doctest id="9d99"
181181
```
182182

183183
### Middleware Order
@@ -229,7 +229,7 @@ $request = new HttpRequest(
229229
// 6. RetryMiddleware processes the response (may retry on certain status codes)
230230
// 7. LoggingMiddleware processes the response (logs incoming response)
231231
$response = $client->withRequest($request)->get();
232-
// @doctest id="f78f"
232+
// @doctest id="705e"
233233
```
234234

235235
## Built-in Middleware
@@ -248,7 +248,7 @@ $client->withMiddleware(new DebugMiddleware());
248248

249249
// Or use the convenience method
250250
$client->withDebugPreset('on');
251-
// @doctest id="bc30"
251+
// @doctest id="7c8c"
252252
```
253253

254254
The debug middleware logs:
@@ -275,7 +275,7 @@ return [
275275
'responseStreamByLine' => true, // Dump stream as full lines or raw chunks
276276
],
277277
];
278-
// @doctest id="b4a7"
278+
// @doctest id="4199"
279279
```
280280

281281
### StreamByLine Middleware
@@ -287,7 +287,7 @@ use Cognesy\Http\Middleware\ServerSideEvents\StreamSSEsMiddleware;
287287

288288
// Add stream by line middleware
289289
$client->withMiddleware(new StreamSSEsMiddleware());
290-
// @doctest id="82ce"
290+
// @doctest id="0d96"
291291
```
292292

293293
You can customize how lines are processed by providing a parser function:
@@ -302,7 +302,7 @@ $lineParser = function (string $line) {
302302
};
303303

304304
$client->withMiddleware(new StreamByLineMiddleware($lineParser));
305-
// @doctest id="0c4f"
305+
// @doctest id="d148"
306306
```
307307

308308

@@ -318,7 +318,7 @@ $client->withMiddleware(
318318
new BufferResponseMiddleware(), // Buffer responses for reuse
319319
new DebugMiddleware() // Log requests and responses
320320
);
321-
// @doctest id="353c"
321+
// @doctest id="9083"
322322
```
323323

324324
#### API Client Setup
@@ -331,7 +331,7 @@ $client->withMiddleware(
331331
new RateLimitingMiddleware(maxRequests: 100), // Respect rate limits
332332
new LoggingMiddleware() // Log API interactions
333333
);
334-
// @doctest id="27cf"
334+
// @doctest id="c73a"
335335
```
336336

337337
#### Testing Setup
@@ -341,7 +341,7 @@ $client = new HttpClient();
341341
$client->withMiddleware(
342342
new RecordReplayMiddleware(RecordReplayMiddleware::MODE_REPLAY) // Replay recorded responses
343343
);
344-
// @doctest id="0486"
344+
// @doctest id="d9a4"
345345
```
346346

347347
#### Streaming Setup
@@ -352,7 +352,7 @@ $client->withMiddleware(
352352
new StreamByLineMiddleware(), // Process streaming responses line by line
353353
new BufferResponseMiddleware() // Buffer responses for reuse
354354
);
355-
// @doctest id="62d9"
355+
// @doctest id="231e"
356356
```
357357

358358
By combining middleware components, you can create a highly customized HTTP client that handles complex requirements while keeping your application code clean and focused.

docs-build/packages/http/11-processing-with-middleware.mdx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ $client->withMiddleware(new class implements HttpMiddleware {
7070
return $response;
7171
}
7272
});
73-
// @doctest id="0755"
73+
// @doctest id="4971"
7474
```
7575

7676
This approach is concise but less reusable than defining a named class.
@@ -131,7 +131,7 @@ Then add the middleware to your client:
131131
```php
132132
$client = new HttpClient();
133133
$client->withMiddleware(new JsonStreamMiddleware());
134-
// @doctest id="267e"
134+
// @doctest id="9259"
135135
```
136136

137137
### Response Decoration for Transforming Content
@@ -169,7 +169,7 @@ class XmlToJsonDecorator extends BaseResponseDecorator
169169
return $headers;
170170
}
171171
}
172-
// @doctest id="9bf4"
172+
// @doctest id="5628"
173173
```
174174

175175
And the corresponding middleware:
@@ -199,7 +199,7 @@ class XmlToJsonMiddleware extends BaseMiddleware
199199
return new XmlToJsonDecorator($request, $response);
200200
}
201201
}
202-
// @doctest id="e816"
202+
// @doctest id="2aa6"
203203
```
204204

205205
## Advanced Middleware Examples
@@ -257,7 +257,7 @@ class AnalyticsMiddleware extends BaseMiddleware
257257
return $response;
258258
}
259259
}
260-
// @doctest id="09cd"
260+
// @doctest id="284c"
261261
```
262262

263263
### Circuit Breaker Middleware
@@ -347,7 +347,7 @@ class CircuitBreakerMiddleware extends BaseMiddleware
347347
}
348348
}
349349
}
350-
// @doctest id="cb29"
350+
// @doctest id="0c25"
351351
```
352352

353353
### Conditional Middleware
@@ -387,7 +387,7 @@ class ConditionalMiddleware implements HttpMiddleware
387387
return $next->handle($request);
388388
}
389389
}
390-
// @doctest id="f511"
390+
// @doctest id="19bf"
391391
```
392392

393393
Usage example:
@@ -401,7 +401,7 @@ $conditionalCaching = new ConditionalMiddleware(
401401
);
402402

403403
$client->withMiddleware($conditionalCaching);
404-
// @doctest id="d112"
404+
// @doctest id="1397"
405405
```
406406

407407
### Request ID Middleware
@@ -454,7 +454,7 @@ class RequestIdMiddleware extends BaseMiddleware
454454
return $response;
455455
}
456456
}
457-
// @doctest id="0704"
457+
// @doctest id="6bad"
458458
```
459459

460460
### OpenTelemetry Tracing Middleware
@@ -537,7 +537,7 @@ class TracingMiddleware extends BaseMiddleware
537537
}
538538
}
539539
}
540-
// @doctest id="0e32"
540+
// @doctest id="a6b3"
541541
```
542542

543543
### Customizing Middleware for LLM APIs
@@ -643,7 +643,7 @@ class LlmStreamingMiddleware extends BaseMiddleware
643643
};
644644
}
645645
}
646-
// @doctest id="aad1"
646+
// @doctest id="8237"
647647
```
648648

649649
### Combining Multiple Middleware Components
@@ -687,7 +687,7 @@ $client->withMiddleware(
687687

688688
// Now the client is ready to use with a complete middleware pipeline
689689
$response = $client->withRequest($request)->get();
690-
// @doctest id="d81f"
690+
// @doctest id="d036"
691691
```
692692

693693
With this setup, requests and responses flow through the middleware in the following order:

0 commit comments

Comments
 (0)