15 files changed
+281
-28826
designs/active_chat/screen.png
Binary files a/designs/active_chat/screen.png and /dev/null differ
designs/chat_empty/screen.png
Binary files a/designs/chat_empty/screen.png and /dev/null differ
designs/monolith_precision/DESIGN.md
deleted
-100
@@ -1,100 +0,0 @@
1
-# Design System Documentation: Obsidian Editorial
2
-
3
-## 1. Overview & Creative North Star
4
-**Creative North Star: The Obsidian Architect**
5
-This design system moves beyond the "generic dark mode" template. It is built on the principles of **Obsidian Editorial**: a philosophy that treats digital interfaces as high-end print medium. We are not just building an AI app; we are building a laboratory for the mind.
6
-
7
-The goal is to move away from "contained" UI (boxes inside boxes) and toward "structural" UI. We achieve this through intentional asymmetry, extreme typographic contrast, and a sophisticated layering of dark-neutral tones that mimic the depth of volcanic glass. The experience should feel whispered, not shouted—authoritative, precise, and breathing with immense negative space.
8
-
9
----
10
-
11
-### 2. Colors & Tonal Depth
12
-The palette is rooted in a monochromatic spectrum, designed to minimize cognitive load while maximizing perceived depth.
13
-
14
-| Token | Hex | Role |
15
-| :--- | :--- | :--- |
16
-| `background` | `#131313` | The base canvas. Dark, but not true black. |
17
-| `primary` | `#FFFFFF` | Actionable items and high-impact text. |
18
-| `on_primary` | `#1A1C1C` | Inverted text for primary buttons. |
19
-| `surface_container_lowest` | `#0E0E0E` | Inset elements, deep wells, or inactive inputs. |
20
-| `surface_container_high` | `#2A2A2A` | Elevated cards or focused modal layers. |
21
-| `outline_variant` | `#474747` | Subtle structural definition (use sparingly). |
22
-
23
-#### The "No-Line" Rule
24
-Standard 1px solid borders are strictly prohibited for sectioning. To define a new area, use a background color shift. For example, a `surface_container_low` side-panel sitting against a `surface` background. The eye should perceive the edge through the change in tone, not a drawn line.
25
-
26
-#### Surface Hierarchy & Nesting
27
-Treat the UI as a series of physical layers.
28
-- **Base Level:** `background`
29
-- **Sectioning:** `surface_container_low`
30
-- **Interactive Elements:** `surface_container_high`
31
-- **Floating Modals:** `surface_bright` with a 24px backdrop blur.
32
-
33
-#### Signature Textures (The Director’s Polish)
34
-While the base is minimalist, use a subtle 1% noise texture or a microscopic tonal gradient (e.g., `primary` to `primary_container` across 120 degrees) on primary CTAs. This prevents the "flat digital" look and adds a "physical" soul to the white elements.
35
-
36
----
37
-
38
-### 3. Typography
39
-We utilize **Geist Sans** for its Swiss-inspired neutrality and **Geist Mono** for technical/AI data.
40
-
41
-* **Display (Editorial Voice):** Use `display-lg` (3.5rem) with `-0.04em` letter spacing for hero headers. This creates a tight, "locked-in" editorial feel.
42
-* **Body (The Workhorse):** `body-md` (0.875rem) is the default for AI-generated responses. It provides high legibility without overcrowding the screen.
43
-* **Labels (The Technical Layer):** Use `label-sm` (0.6875rem) in **Geist Mono** for metadata (tokens, server latency, model IDs). All labels should be Uppercase with `0.05em` tracking to distinguish them from content.
44
-
45
----
46
-
47
-### 4. Elevation & Depth
48
-In this design system, height is an illusion created by light, not lines.
49
-
50
-* **The Layering Principle:** Depth is achieved by "stacking." A `surface_container_lowest` card placed inside a `surface_container_high` section creates a natural "carved out" effect.
51
-* **Ambient Shadows:** For floating elements (menus/modals), use a "Whisper Shadow."
52
- * *Shadow:* `0px 10px 40px rgba(0, 0, 0, 0.4)`
53
- * The shadow color must be a tinted version of the background, never pure black.
54
-* **The "Ghost Border" Fallback:** If a border is required for accessibility, use the `outline_variant` token at **15% opacity**. It should be felt, not seen.
55
-* **Glassmorphism:** Use `surface_bright` at 60% opacity with a `20px` backdrop blur for floating navigation bars to allow the underlying AI "stream" of text to bleed through.
56
-
57
----
58
-
59
-### 5. Components
60
-
61
-#### Buttons
62
-- **Primary:** `primary` background, `on_primary` text. No border. Corners: `6px`.
63
-- **Secondary:** `surface_container_highest` background. Corners: `6px`.
64
-- **Ghost:** No background. `primary` text. Hover state shifts background to `surface_container_low`.
65
-
66
-#### Input Fields
67
-Forbid the "boxed" input. Use a "Platform" style: A `surface_container_lowest` background with a subtle 1px bottom-stroke using `outline_variant`. On focus, the bottom stroke becomes `primary`.
68
-
69
-#### Cards & Lists
70
-Cards must never have dividers. Separate list items using `spacing-4` (1rem) of vertical white space. To group items, wrap them in a `surface_container_low` container with a `md` (0.75rem) corner radius.
71
-
72
-#### AI Command Bar (The "Core" Component)
73
-This is a floating bar using `surface_container_highest`.
74
-- **Radius:** `full` (9999px).
75
-- **Style:** Glassmorphism (blur: 16px).
76
-- **Leading Icon:** Lucide `Sparkles` in `primary`.
77
-
78
----
79
-
80
-### 6. Do’s and Don’ts
81
-
82
-#### Do
83
-- **Embrace Asymmetry:** Align headings to the far left and metadata to the far right to create a wide, expansive feel.
84
-- **Use Mono for Values:** Any number or technical ID must be in **Geist Mono**.
85
-- **Generous Whitespace:** If you think there is enough space, add 20% more. This system thrives on "the void."
86
-
87
-#### Don’t
88
-- **Don't use #000000:** It kills the "Obsidian" depth. Stick to the `#0E0E0E` to `#131313` range.
89
-- **Don't use Dividers:** If you need a divider, use a `1px` height `surface_container_low` block that only spans 80% of the container width.
90
-- **Don't use Rounded-None:** Always keep corners between `6dp` and `12dp` (except for the Command Bar) to soften the brutalist typography.
91
-- **Don't use colorful Icons:** Keep all Lucide icons in `on_surface_variant` (#C6C6C6) or `primary`.
92
-
93
----
94
-
95
-### 7. Spacing Scale Reference
96
-Use these tokens to maintain the editorial rhythm:
97
-- **Tight (2):** 0.5rem (Icon/Text spacing)
98
-- **Standard (4):** 1rem (Internal padding)
99
-- **Section (8):** 2rem (Between content blocks)
100
-- **Breathing (12):** 3rem (Margin from screen edges)
\ No newline at end of file
designs/onboarding_step_1/screen.png
Binary files a/designs/onboarding_step_1/screen.png and /dev/null differ
designs/persona_creation/screen.png
Binary files a/designs/persona_creation/screen.png and /dev/null differ
designs/server_management/screen.png
Binary files a/designs/server_management/screen.png and /dev/null differ
designs/settings/screen.png
Binary files a/designs/settings/screen.png and /dev/null differ
docs/openapi.json
deleted
-28602
@@ -1,28602 +0,0 @@
1
-{
2
- "openapi": "3.1.0",
3
- "info": {
4
- "title": "OpenRouter API",
5
- "version": "1.0.0",
6
- "description": "OpenAI-compatible API with additional OpenRouter features",
7
- "contact": {
8
- "name": "OpenRouter Support",
9
- "url": "https://openrouter.ai/docs",
10
- "email": "support@openrouter.ai"
11
- },
12
- "license": {
13
- "name": "MIT",
14
- "url": "https://opensource.org/licenses/MIT"
15
- }
16
- },
17
- "servers": [
18
- {
19
- "url": "https://openrouter.ai/api/v1",
20
- "description": "Production server",
21
- "x-speakeasy-server-id": "production"
22
- }
23
- ],
24
- "security": [
25
- {
26
- "apiKey": []
27
- }
28
- ],
29
- "externalDocs": {
30
- "description": "OpenRouter Documentation",
31
- "url": "https://openrouter.ai/docs"
32
- },
33
- "components": {
34
- "schemas": {
35
- "OpenAIResponsesResponseStatus": {
36
- "type": "string",
37
- "enum": [
38
- "completed",
39
- "incomplete",
40
- "in_progress",
41
- "failed",
42
- "cancelled",
43
- "queued"
44
- ],
45
- "x-speakeasy-unknown-values": "allow"
46
- },
47
- "FileCitation": {
48
- "type": "object",
49
- "properties": {
50
- "type": {
51
- "type": "string",
52
- "enum": [
53
- "file_citation"
54
- ]
55
- },
56
- "file_id": {
57
- "type": "string"
58
- },
59
- "filename": {
60
- "type": "string"
61
- },
62
- "index": {
63
- "type": "number"
64
- }
65
- },
66
- "required": [
67
- "type",
68
- "file_id",
69
- "filename",
70
- "index"
71
- ],
72
- "example": {
73
- "type": "file_citation",
74
- "file_id": "file-abc123",
75
- "filename": "research_paper.pdf",
76
- "index": 0
77
- }
78
- },
79
- "URLCitation": {
80
- "type": "object",
81
- "properties": {
82
- "type": {
83
- "type": "string",
84
- "enum": [
85
- "url_citation"
86
- ]
87
- },
88
- "url": {
89
- "type": "string"
90
- },
91
- "title": {
92
- "type": "string"
93
- },
94
- "start_index": {
95
- "type": "number"
96
- },
97
- "end_index": {
98
- "type": "number"
99
- }
100
- },
101
- "required": [
102
- "type",
103
- "url",
104
- "title",
105
- "start_index",
106
- "end_index"
107
- ],
108
- "example": {
109
- "type": "url_citation",
110
- "start_index": 0,
111
- "end_index": 42,
112
- "title": "OpenRouter Documentation",
113
- "url": "https://openrouter.ai/docs"
114
- }
115
- },
116
- "FilePath": {
117
- "type": "object",
118
- "properties": {
119
- "type": {
120
- "type": "string",
121
- "enum": [
122
- "file_path"
123
- ]
124
- },
125
- "file_id": {
126
- "type": "string"
127
- },
128
- "index": {
129
- "type": "number"
130
- }
131
- },
132
- "required": [
133
- "type",
134
- "file_id",
135
- "index"
136
- ],
137
- "example": {
138
- "type": "file_path",
139
- "file_id": "file-xyz789",
140
- "index": 0
141
- }
142
- },
143
- "OpenAIResponsesAnnotation": {
144
- "anyOf": [
145
- {
146
- "$ref": "#/components/schemas/FileCitation"
147
- },
148
- {
149
- "$ref": "#/components/schemas/URLCitation"
150
- },
151
- {
152
- "$ref": "#/components/schemas/FilePath"
153
- }
154
- ]
155
- },
156
- "ResponseOutputText": {
157
- "type": "object",
158
- "properties": {
159
- "type": {
160
- "type": "string",
161
- "enum": [
162
- "output_text"
163
- ]
164
- },
165
- "text": {
166
- "type": "string"
167
- },
168
- "annotations": {
169
- "type": "array",
170
- "items": {
171
- "$ref": "#/components/schemas/OpenAIResponsesAnnotation"
172
- }
173
- },
174
- "logprobs": {
175
- "type": "array",
176
- "items": {
177
- "type": "object",
178
- "properties": {
179
- "token": {
180
- "type": "string"
181
- },
182
- "bytes": {
183
- "type": "array",
184
- "items": {
185
- "type": "number"
186
- }
187
- },
188
- "logprob": {
189
- "type": "number"
190
- },
191
- "top_logprobs": {
192
- "type": "array",
193
- "items": {
194
- "type": "object",
195
- "properties": {
196
- "token": {
197
- "type": "string"
198
- },
199
- "bytes": {
200
- "type": "array",
201
- "items": {
202
- "type": "number"
203
- }
204
- },
205
- "logprob": {
206
- "type": "number"
207
- }
208
- },
209
- "required": [
210
- "token",
211
- "bytes",
212
- "logprob"
213
- ]
214
- }
215
- }
216
- },
217
- "required": [
218
- "token",
219
- "bytes",
220
- "logprob",
221
- "top_logprobs"
222
- ]
223
- }
224
- }
225
- },
226
- "required": [
227
- "type",
228
- "text"
229
- ],
230
- "example": {
231
- "type": "output_text",
232
- "text": "The capital of France is Paris.",
233
- "annotations": [
234
- {
235
- "type": "url_citation",
236
- "start_index": 0,
237
- "end_index": 42,
238
- "title": "Paris - Wikipedia",
239
- "url": "https://en.wikipedia.org/wiki/Paris"
240
- }
241
- ]
242
- }
243
- },
244
- "OpenAIResponsesRefusalContent": {
245
- "type": "object",
246
- "properties": {
247
- "type": {
248
- "type": "string",
249
- "enum": [
250
- "refusal"
251
- ]
252
- },
253
- "refusal": {
254
- "type": "string"
255
- }
256
- },
257
- "required": [
258
- "type",
259
- "refusal"
260
- ],
261
- "example": {
262
- "type": "refusal",
263
- "refusal": "I'm sorry, I cannot assist with that request"
264
- }
265
- },
266
- "OutputMessage": {
267
- "type": "object",
268
- "properties": {
269
- "id": {
270
- "type": "string"
271
- },
272
- "role": {
273
- "type": "string",
274
- "enum": [
275
- "assistant"
276
- ]
277
- },
278
- "type": {
279
- "type": "string",
280
- "enum": [
281
- "message"
282
- ]
283
- },
284
- "status": {
285
- "anyOf": [
286
- {
287
- "type": "string",
288
- "enum": [
289
- "completed"
290
- ]
291
- },
292
- {
293
- "type": "string",
294
- "enum": [
295
- "incomplete"
296
- ]
297
- },
298
- {
299
- "type": "string",
300
- "enum": [
301
- "in_progress"
302
- ]
303
- }
304
- ]
305
- },
306
- "content": {
307
- "type": "array",
308
- "items": {
309
- "anyOf": [
310
- {
311
- "$ref": "#/components/schemas/ResponseOutputText"
312
- },
313
- {
314
- "$ref": "#/components/schemas/OpenAIResponsesRefusalContent"
315
- }
316
- ]
317
- }
318
- },
319
- "phase": {
320
- "anyOf": [
321
- {
322
- "type": "string",
323
- "enum": [
324
- "commentary"
325
- ]
326
- },
327
- {
328
- "type": "string",
329
- "enum": [
330
- "final_answer"
331
- ]
332
- },
333
- {
334
- "nullable": true
335
- }
336
- ],
337
- "description": "The phase of an assistant message. Use `commentary` for an intermediate assistant message and `final_answer` for the final assistant message. For follow-up requests with models like `gpt-5.3-codex` and later, preserve and resend phase on all assistant messages. Omitting it can degrade performance. Not used for user messages."
338
- }
339
- },
340
- "required": [
341
- "id",
342
- "role",
343
- "type",
344
- "content"
345
- ],
346
- "example": {
347
- "id": "msg-abc123",
348
- "role": "assistant",
349
- "type": "message",
350
- "status": "completed",
351
- "content": [
352
- {
353
- "type": "output_text",
354
- "text": "Hello! How can I help you today?"
355
- }
356
- ]
357
- }
358
- },
359
- "OutputMessageItem": {
360
- "allOf": [
361
- {
362
- "$ref": "#/components/schemas/OutputMessage"
363
- },
364
- {
365
- "type": "object",
366
- "properties": {}
367
- }
368
- ],
369
- "example": {
370
- "id": "msg-123",
371
- "type": "message",
372
- "role": "assistant",
373
- "status": "completed",
374
- "content": [
375
- {
376
- "type": "output_text",
377
- "text": "Hello! How can I help you?",
378
- "annotations": []
379
- }
380
- ]
381
- },
382
- "description": "An output message item"
383
- },
384
- "ReasoningTextContent": {
385
- "type": "object",
386
- "properties": {
387
- "type": {
388
- "type": "string",
389
- "enum": [
390
- "reasoning_text"
391
- ]
392
- },
393
- "text": {
394
- "type": "string"
395
- }
396
- },
397
- "required": [
398
- "type",
399
- "text"
400
- ],
401
- "example": {
402
- "type": "reasoning_text",
403
- "text": "Let me think step by step about this problem..."
404
- }
405
- },
406
- "ReasoningSummaryText": {
407
- "type": "object",
408
- "properties": {
409
- "type": {
410
- "type": "string",
411
- "enum": [
412
- "summary_text"
413
- ]
414
- },
415
- "text": {
416
- "type": "string"
417
- }
418
- },
419
- "required": [
420
- "type",
421
- "text"
422
- ],
423
- "example": {
424
- "type": "summary_text",
425
- "text": "Analyzed the problem using first principles"
426
- }
427
- },
428
- "OutputItemReasoning": {
429
- "type": "object",
430
- "properties": {
431
- "type": {
432
- "type": "string",
433
- "enum": [
434
- "reasoning"
435
- ]
436
- },
437
- "id": {
438
- "type": "string"
439
- },
440
- "content": {
441
- "type": "array",
442
- "items": {
443
- "$ref": "#/components/schemas/ReasoningTextContent"
444
- }
445
- },
446
- "summary": {
447
- "type": "array",
448
- "items": {
449
- "$ref": "#/components/schemas/ReasoningSummaryText"
450
- }
451
- },
452
- "encrypted_content": {
453
- "type": "string",
454
- "nullable": true
455
- },
456
- "status": {
457
- "anyOf": [
458
- {
459
- "type": "string",
460
- "enum": [
461
- "completed"
462
- ]
463
- },
464
- {
465
- "type": "string",
466
- "enum": [
467
- "incomplete"
468
- ]
469
- },
470
- {
471
- "type": "string",
472
- "enum": [
473
- "in_progress"
474
- ]
475
- }
476
- ]
477
- }
478
- },
479
- "required": [
480
- "type",
481
- "id",
482
- "summary"
483
- ],
484
- "example": {
485
- "type": "reasoning",
486
- "id": "reasoning-abc123",
487
- "summary": [
488
- {
489
- "type": "summary_text",
490
- "text": "Analyzed the problem using first principles"
491
- }
492
- ]
493
- }
494
- },
495
- "OutputReasoningItem": {
496
- "allOf": [
497
- {
498
- "$ref": "#/components/schemas/OutputItemReasoning"
499
- },
500
- {
501
- "type": "object",
502
- "properties": {
503
- "content": {
504
- "type": "array",
505
- "nullable": true,
506
- "items": {
507
- "$ref": "#/components/schemas/ReasoningTextContent"
508
- }
509
- },
510
- "signature": {
511
- "type": "string",
512
- "nullable": true,
513
- "description": "A signature for the reasoning content, used for verification",
514
- "example": "EvcBCkgIChABGAIqQKkSDbRuVEQUk9qN1odC098l9SEj..."
515
- },
516
- "format": {
517
- "type": "string",
518
- "nullable": true,
519
- "enum": [
520
- "unknown",
521
- "openai-responses-v1",
522
- "azure-openai-responses-v1",
523
- "xai-responses-v1",
524
- "anthropic-claude-v1",
525
- "google-gemini-v1"
526
- ],
527
- "description": "The format of the reasoning content",
528
- "example": "anthropic-claude-v1",
529
- "x-speakeasy-unknown-values": "allow"
530
- }
531
- }
532
- }
533
- ],
534
- "example": {
535
- "id": "reasoning-123",
536
- "type": "reasoning",
537
- "status": "completed",
538
- "summary": [
539
- {
540
- "type": "summary_text",
541
- "text": "Analyzed the problem and found the optimal solution."
542
- }
543
- ],
544
- "content": [
545
- {
546
- "type": "reasoning_text",
547
- "text": "First, we analyze the problem..."
548
- }
549
- ],
550
- "signature": "EvcBCkgIChABGAIqQKkSDbRuVEQUk9qN1odC098l9SEj...",
551
- "format": "anthropic-claude-v1"
552
- },
553
- "description": "An output item containing reasoning"
554
- },
555
- "OutputItemFunctionCall": {
556
- "type": "object",
557
- "properties": {
558
- "type": {
559
- "type": "string",
560
- "enum": [
561
- "function_call"
562
- ]
563
- },
564
- "id": {
565
- "type": "string"
566
- },
567
- "name": {
568
- "type": "string"
569
- },
570
- "arguments": {
571
- "type": "string"
572
- },
573
- "call_id": {
574
- "type": "string"
575
- },
576
- "status": {
577
- "anyOf": [
578
- {
579
- "type": "string",
580
- "enum": [
581
- "completed"
582
- ]
583
- },
584
- {
585
- "type": "string",
586
- "enum": [
587
- "incomplete"
588
- ]
589
- },
590
- {
591
- "type": "string",
592
- "enum": [
593
- "in_progress"
594
- ]
595
- }
596
- ]
597
- }
598
- },
599
- "required": [
600
- "type",
601
- "name",
602
- "arguments",
603
- "call_id"
604
- ],
605
- "example": {
606
- "type": "function_call",
607
- "id": "call-abc123",
608
- "name": "get_weather",
609
- "arguments": "{\"location\":\"San Francisco\",\"unit\":\"celsius\"}",
610
- "call_id": "call-abc123"
611
- }
612
- },
613
- "OutputFunctionCallItem": {
614
- "allOf": [
615
- {
616
- "$ref": "#/components/schemas/OutputItemFunctionCall"
617
- },
618
- {
619
- "type": "object",
620
- "properties": {}
621
- }
622
- ],
623
- "example": {
624
- "type": "function_call",
625
- "id": "call-abc123",
626
- "name": "get_weather",
627
- "arguments": "{\"location\":\"San Francisco\",\"unit\":\"celsius\"}",
628
- "call_id": "call-abc123"
629
- }
630
- },
631
- "WebSearchStatus": {
632
- "type": "string",
633
- "enum": [
634
- "completed",
635
- "searching",
636
- "in_progress",
637
- "failed"
638
- ],
639
- "example": "completed",
640
- "x-speakeasy-unknown-values": "allow"
641
- },
642
- "OutputItemWebSearchCall": {
643
- "type": "object",
644
- "properties": {
645
- "type": {
646
- "type": "string",
647
- "enum": [
648
- "web_search_call"
649
- ]
650
- },
651
- "id": {
652
- "type": "string"
653
- },
654
- "action": {
655
- "oneOf": [
656
- {
657
- "type": "object",
658
- "properties": {
659
- "type": {
660
- "type": "string",
661
- "enum": [
662
- "search"
663
- ]
664
- },
665
- "query": {
666
- "type": "string"
667
- },
668
- "queries": {
669
- "type": "array",
670
- "items": {
671
- "type": "string"
672
- }
673
- },
674
- "sources": {
675
- "type": "array",
676
- "items": {
677
- "type": "object",
678
- "properties": {
679
- "type": {
680
- "type": "string",
681
- "enum": [
682
- "url"
683
- ]
684
- },
685
- "url": {
686
- "type": "string"
687
- }
688
- },
689
- "required": [
690
- "type",
691
- "url"
692
- ]
693
- }
694
- }
695
- },
696
- "required": [
697
- "type",
698
- "query"
699
- ]
700
- },
701
- {
702
- "type": "object",
703
- "properties": {
704
- "type": {
705
- "type": "string",
706
- "enum": [
707
- "open_page"
708
- ]
709
- },
710
- "url": {
711
- "type": "string",
712
- "nullable": true
713
- }
714
- },
715
- "required": [
716
- "type"
717
- ]
718
- },
719
- {
720
- "type": "object",
721
- "properties": {
722
- "type": {
723
- "type": "string",
724
- "enum": [
725
- "find_in_page"
726
- ]
727
- },
728
- "pattern": {
729
- "type": "string"
730
- },
731
- "url": {
732
- "type": "string"
733
- }
734
- },
735
- "required": [
736
- "type",
737
- "pattern",
738
- "url"
739
- ]
740
- }
741
- ]
742
- },
743
- "status": {
744
- "$ref": "#/components/schemas/WebSearchStatus"
745
- }
746
- },
747
- "required": [
748
- "type",
749
- "id",
750
- "action",
751
- "status"
752
- ],
753
- "example": {
754
- "type": "web_search_call",
755
- "id": "search-abc123",
756
- "action": {
757
- "type": "search",
758
- "query": "OpenAI API"
759
- },
760
- "status": "completed"
761
- }
762
- },
763
- "OutputWebSearchCallItem": {
764
- "allOf": [
765
- {
766
- "$ref": "#/components/schemas/OutputItemWebSearchCall"
767
- },
768
- {
769
- "type": "object",
770
- "properties": {}
771
- }
772
- ],
773
- "example": {
774
- "type": "web_search_call",
775
- "id": "search-abc123",
776
- "action": {
777
- "type": "search",
778
- "query": "OpenAI API"
779
- },
780
- "status": "completed"
781
- }
782
- },
783
- "OutputItemFileSearchCall": {
784
- "type": "object",
785
- "properties": {
786
- "type": {
787
- "type": "string",
788
- "enum": [
789
- "file_search_call"
790
- ]
791
- },
792
- "id": {
793
- "type": "string"
794
- },
795
- "queries": {
796
- "type": "array",
797
- "items": {
798
- "type": "string"
799
- }
800
- },
801
- "status": {
802
- "$ref": "#/components/schemas/WebSearchStatus"
803
- }
804
- },
805
- "required": [
806
- "type",
807
- "id",
808
- "queries",
809
- "status"
810
- ],
811
- "example": {
812
- "type": "file_search_call",
813
- "id": "filesearch-abc123",
814
- "queries": [
815
- "machine learning algorithms",
816
- "neural networks"
817
- ],
818
- "status": "completed"
819
- }
820
- },
821
- "OutputFileSearchCallItem": {
822
- "allOf": [
823
- {
824
- "$ref": "#/components/schemas/OutputItemFileSearchCall"
825
- },
826
- {
827
- "type": "object",
828
- "properties": {}
829
- }
830
- ],
831
- "example": {
832
- "type": "file_search_call",
833
- "id": "filesearch-abc123",
834
- "queries": [
835
- "machine learning algorithms",
836
- "neural networks"
837
- ],
838
- "status": "completed"
839
- }
840
- },
841
- "ImageGenerationStatus": {
842
- "type": "string",
843
- "enum": [
844
- "in_progress",
845
- "completed",
846
- "generating",
847
- "failed"
848
- ],
849
- "example": "completed",
850
- "x-speakeasy-unknown-values": "allow"
851
- },
852
- "OutputItemImageGenerationCall": {
853
- "type": "object",
854
- "properties": {
855
- "type": {
856
- "type": "string",
857
- "enum": [
858
- "image_generation_call"
859
- ]
860
- },
861
- "id": {
862
- "type": "string"
863
- },
864
- "result": {
865
- "type": "string",
866
- "nullable": true,
867
- "default": null
868
- },
869
- "status": {
870
- "$ref": "#/components/schemas/ImageGenerationStatus"
871
- }
872
- },
873
- "required": [
874
- "type",
875
- "id",
876
- "status"
877
- ],
878
- "example": {
879
- "type": "image_generation_call",
880
- "id": "imagegen-abc123",
881
- "result": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
882
- "status": "completed"
883
- }
884
- },
885
- "OutputImageGenerationCallItem": {
886
- "allOf": [
887
- {
888
- "$ref": "#/components/schemas/OutputItemImageGenerationCall"
889
- },
890
- {
891
- "type": "object",
892
- "properties": {}
893
- }
894
- ],
895
- "example": {
896
- "type": "image_generation_call",
897
- "id": "imagegen-abc123",
898
- "result": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
899
- "status": "completed"
900
- }
901
- },
902
- "OutputServerToolItem": {
903
- "type": "object",
904
- "properties": {
905
- "type": {
906
- "type": "string",
907
- "pattern": "^openrouter:",
908
- "description": "Server tool type (e.g. openrouter:datetime, openrouter:web_search)"
909
- },
910
- "id": {
911
- "type": "string"
912
- },
913
- "status": {
914
- "type": "string",
915
- "enum": [
916
- "completed",
917
- "in_progress",
918
- "incomplete"
919
- ],
920
- "x-speakeasy-unknown-values": "allow"
921
- }
922
- },
923
- "required": [
924
- "type",
925
- "status"
926
- ],
927
- "additionalProperties": {
928
- "nullable": true
929
- },
930
- "description": "A generic OpenRouter server tool output item",
931
- "example": {
932
- "type": "openrouter:web_search",
933
- "id": "ws_tmp_abc123",
934
- "status": "completed"
935
- }
936
- },
937
- "OutputItems": {
938
- "anyOf": [
939
- {
940
- "$ref": "#/components/schemas/OutputMessageItem"
941
- },
942
- {
943
- "$ref": "#/components/schemas/OutputReasoningItem"
944
- },
945
- {
946
- "$ref": "#/components/schemas/OutputFunctionCallItem"
947
- },
948
- {
949
- "$ref": "#/components/schemas/OutputWebSearchCallItem"
950
- },
951
- {
952
- "$ref": "#/components/schemas/OutputFileSearchCallItem"
953
- },
954
- {
955
- "$ref": "#/components/schemas/OutputImageGenerationCallItem"
956
- },
957
- {
958
- "$ref": "#/components/schemas/OutputServerToolItem"
959
- }
960
- ],
961
- "description": "An output item from the response",
962
- "example": {
963
- "id": "msg-abc123",
964
- "role": "assistant",
965
- "type": "message",
966
- "status": "completed",
967
- "content": [
968
- {
969
- "type": "output_text",
970
- "text": "Hello! How can I help you today?"
971
- }
972
- ]
973
- }
974
- },
975
- "ResponsesErrorField": {
976
- "type": "object",
977
- "nullable": true,
978
- "properties": {
979
- "code": {
980
- "type": "string",
981
- "enum": [
982
- "server_error",
983
- "rate_limit_exceeded",
984
- "invalid_prompt",
985
- "vector_store_timeout",
986
- "invalid_image",
987
- "invalid_image_format",
988
- "invalid_base64_image",
989
- "invalid_image_url",
990
- "image_too_large",
991
- "image_too_small",
992
- "image_parse_error",
993
- "image_content_policy_violation",
994
- "invalid_image_mode",
995
- "image_file_too_large",
996
- "unsupported_image_media_type",
997
- "empty_image_file",
998
- "failed_to_download_image",
999
- "image_file_not_found"
1000
- ],
1001
- "x-speakeasy-unknown-values": "allow"
1002
- },
1003
- "message": {
1004
- "type": "string"
1005
- }
1006
- },
1007
- "required": [
1008
- "code",
1009
- "message"
1010
- ],
1011
- "description": "Error information returned from the API",
1012
- "example": {
1013
- "code": "rate_limit_exceeded",
1014
- "message": "Rate limit exceeded. Please try again later."
1015
- }
1016
- },
1017
- "IncompleteDetails": {
1018
- "type": "object",
1019
- "nullable": true,
1020
- "properties": {
1021
- "reason": {
1022
- "type": "string",
1023
- "enum": [
1024
- "max_output_tokens",
1025
- "content_filter"
1026
- ],
1027
- "x-speakeasy-unknown-values": "allow"
1028
- }
1029
- }
1030
- },
1031
- "OpenAIResponsesUsage": {
1032
- "type": "object",
1033
- "properties": {
1034
- "input_tokens": {
1035
- "type": "number"
1036
- },
1037
- "input_tokens_details": {
1038
- "type": "object",
1039
- "properties": {
1040
- "cached_tokens": {
1041
- "type": "number"
1042
- }
1043
- },
1044
- "required": [
1045
- "cached_tokens"
1046
- ]
1047
- },
1048
- "output_tokens": {
1049
- "type": "number"
1050
- },
1051
- "output_tokens_details": {
1052
- "type": "object",
1053
- "properties": {
1054
- "reasoning_tokens": {
1055
- "type": "number"
1056
- }
1057
- },
1058
- "required": [
1059
- "reasoning_tokens"
1060
- ]
1061
- },
1062
- "total_tokens": {
1063
- "type": "number"
1064
- }
1065
- },
1066
- "required": [
1067
- "input_tokens",
1068
- "input_tokens_details",
1069
- "output_tokens",
1070
- "output_tokens_details",
1071
- "total_tokens"
1072
- ]
1073
- },
1074
- "Usage": {
1075
- "allOf": [
1076
- {
1077
- "$ref": "#/components/schemas/OpenAIResponsesUsage"
1078
- },
1079
- {
1080
- "type": "object",
1081
- "nullable": true,
1082
- "properties": {
1083
- "cost": {
1084
- "type": "number",
1085
- "nullable": true,
1086
- "description": "Cost of the completion"
1087
- },
1088
- "is_byok": {
1089
- "type": "boolean",
1090
- "description": "Whether a request was made using a Bring Your Own Key configuration"
1091
- },
1092
- "cost_details": {
1093
- "type": "object",
1094
- "properties": {
1095
- "upstream_inference_cost": {
1096
- "type": "number",
1097
- "format": "double"
1098
- },
1099
- "upstream_inference_input_cost": {
1100
- "type": "number",
1101
- "format": "double"
1102
- },
1103
- "upstream_inference_output_cost": {
1104
- "type": "number",
1105
- "format": "double"
1106
- }
1107
- },
1108
- "required": [
1109
- "upstream_inference_input_cost",
1110
- "upstream_inference_output_cost"
1111
- ]
1112
- }
1113
- }
1114
- }
1115
- ],
1116
- "description": "Token usage information for the response",
1117
- "example": {
1118
- "input_tokens": 10,
1119
- "output_tokens": 25,
1120
- "total_tokens": 35,
1121
- "input_tokens_details": {
1122
- "cached_tokens": 0
1123
- },
1124
- "output_tokens_details": {
1125
- "reasoning_tokens": 0
1126
- },
1127
- "cost": 0.0012,
1128
- "cost_details": {
1129
- "upstream_inference_cost": null,
1130
- "upstream_inference_input_cost": 0.0008,
1131
- "upstream_inference_output_cost": 0.0004
1132
- }
1133
- }
1134
- },
1135
- "InputText": {
1136
- "type": "object",
1137
- "properties": {
1138
- "type": {
1139
- "type": "string",
1140
- "enum": [
1141
- "input_text"
1142
- ]
1143
- },
1144
- "text": {
1145
- "type": "string"
1146
- }
1147
- },
1148
- "required": [
1149
- "type",
1150
- "text"
1151
- ],
1152
- "description": "Text input content item",
1153
- "example": {
1154
- "type": "input_text",
1155
- "text": "Hello, how can I help you?"
1156
- }
1157
- },
1158
- "InputImage": {
1159
- "type": "object",
1160
- "properties": {
1161
- "type": {
1162
- "type": "string",
1163
- "enum": [
1164
- "input_image"
1165
- ]
1166
- },
1167
- "detail": {
1168
- "type": "string",
1169
- "enum": [
1170
- "auto",
1171
- "high",
1172
- "low"
1173
- ],
1174
- "x-speakeasy-unknown-values": "allow"
1175
- },
1176
- "image_url": {
1177
- "type": "string",
1178
- "nullable": true
1179
- }
1180
- },
1181
- "required": [
1182
- "type",
1183
- "detail"
1184
- ],
1185
- "description": "Image input content item",
1186
- "example": {
1187
- "type": "input_image",
1188
- "detail": "auto",
1189
- "image_url": "https://example.com/image.jpg"
1190
- }
1191
- },
1192
- "InputFile": {
1193
- "type": "object",
1194
- "properties": {
1195
- "type": {
1196
- "type": "string",
1197
- "enum": [
1198
- "input_file"
1199
- ]
1200
- },
1201
- "file_id": {
1202
- "type": "string",
1203
- "nullable": true
1204
- },
1205
- "file_data": {
1206
- "type": "string"
1207
- },
1208
- "filename": {
1209
- "type": "string"
1210
- },
1211
- "file_url": {
1212
- "type": "string"
1213
- }
1214
- },
1215
- "required": [
1216
- "type"
1217
- ],
1218
- "description": "File input content item",
1219
- "example": {
1220
- "type": "input_file",
1221
- "file_id": "file-abc123",
1222
- "filename": "document.pdf"
1223
- }
1224
- },
1225
- "InputAudio": {
1226
- "type": "object",
1227
- "properties": {
1228
- "type": {
1229
- "type": "string",
1230
- "enum": [
1231
- "input_audio"
1232
- ]
1233
- },
1234
- "input_audio": {
1235
- "type": "object",
1236
- "properties": {
1237
- "data": {
1238
- "type": "string"
1239
- },
1240
- "format": {
1241
- "type": "string",
1242
- "enum": [
1243
- "mp3",
1244
- "wav"
1245
- ],
1246
- "x-speakeasy-unknown-values": "allow"
1247
- }
1248
- },
1249
- "required": [
1250
- "data",
1251
- "format"
1252
- ]
1253
- }
1254
- },
1255
- "required": [
1256
- "type",
1257
- "input_audio"
1258
- ],
1259
- "description": "Audio input content item",
1260
- "example": {
1261
- "type": "input_audio",
1262
- "input_audio": {
1263
- "data": "SGVsbG8gV29ybGQ=",
1264
- "format": "mp3"
1265
- }
1266
- }
1267
- },
1268
- "ToolCallStatusEnum": {
1269
- "type": "string",
1270
- "nullable": true,
1271
- "enum": [
1272
- "in_progress",
1273
- "completed",
1274
- "incomplete"
1275
- ],
1276
- "example": "completed",
1277
- "x-speakeasy-unknown-values": "allow"
1278
- },
1279
- "BaseInputs": {
1280
- "anyOf": [
1281
- {
1282
- "type": "string"
1283
- },
1284
- {
1285
- "type": "array",
1286
- "items": {
1287
- "anyOf": [
1288
- {
1289
- "type": "object",
1290
- "properties": {
1291
- "type": {
1292
- "type": "string",
1293
- "enum": [
1294
- "message"
1295
- ]
1296
- },
1297
- "role": {
1298
- "anyOf": [
1299
- {
1300
- "type": "string",
1301
- "enum": [
1302
- "user"
1303
- ]
1304
- },
1305
- {
1306
- "type": "string",
1307
- "enum": [
1308
- "system"
1309
- ]
1310
- },
1311
- {
1312
- "type": "string",
1313
- "enum": [
1314
- "assistant"
1315
- ]
1316
- },
1317
- {
1318
- "type": "string",
1319
- "enum": [
1320
- "developer"
1321
- ]
1322
- }
1323
- ]
1324
- },
1325
- "content": {
1326
- "anyOf": [
1327
- {
1328
- "type": "array",
1329
- "items": {
1330
- "oneOf": [
1331
- {
1332
- "$ref": "#/components/schemas/InputText"
1333
- },
1334
- {
1335
- "$ref": "#/components/schemas/InputImage"
1336
- },
1337
- {
1338
- "$ref": "#/components/schemas/InputFile"
1339
- },
1340
- {
1341
- "$ref": "#/components/schemas/InputAudio"
1342
- }
1343
- ],
1344
- "discriminator": {
1345
- "propertyName": "type",
1346
- "mapping": {
1347
- "input_text": "#/components/schemas/InputText",
1348
- "input_image": "#/components/schemas/InputImage",
1349
- "input_file": "#/components/schemas/InputFile",
1350
- "input_audio": "#/components/schemas/InputAudio"
1351
- }
1352
- }
1353
- }
1354
- },
1355
- {
1356
- "type": "string"
1357
- }
1358
- ]
1359
- },
1360
- "phase": {
1361
- "anyOf": [
1362
- {
1363
- "type": "string",
1364
- "enum": [
1365
- "commentary"
1366
- ]
1367
- },
1368
- {
1369
- "type": "string",
1370
- "enum": [
1371
- "final_answer"
1372
- ]
1373
- },
1374
- {
1375
- "nullable": true
1376
- }
1377
- ]
1378
- }
1379
- },
1380
- "required": [
1381
- "role",
1382
- "content"
1383
- ]
1384
- },
1385
- {
1386
- "type": "object",
1387
- "properties": {
1388
- "id": {
1389
- "type": "string"
1390
- },
1391
- "type": {
1392
- "type": "string",
1393
- "enum": [
1394
- "message"
1395
- ]
1396
- },
1397
- "role": {
1398
- "anyOf": [
1399
- {
1400
- "type": "string",
1401
- "enum": [
1402
- "user"
1403
- ]
1404
- },
1405
- {
1406
- "type": "string",
1407
- "enum": [
1408
- "system"
1409
- ]
1410
- },
1411
- {
1412
- "type": "string",
1413
- "enum": [
1414
- "developer"
1415
- ]
1416
- }
1417
- ]
1418
- },
1419
- "content": {
1420
- "type": "array",
1421
- "items": {
1422
- "oneOf": [
1423
- {
1424
- "$ref": "#/components/schemas/InputText"
1425
- },
1426
- {
1427
- "$ref": "#/components/schemas/InputImage"
1428
- },
1429
- {
1430
- "$ref": "#/components/schemas/InputFile"
1431
- },
1432
- {
1433
- "$ref": "#/components/schemas/InputAudio"
1434
- }
1435
- ],
1436
- "discriminator": {
1437
- "propertyName": "type",
1438
- "mapping": {
1439
- "input_text": "#/components/schemas/InputText",
1440
- "input_image": "#/components/schemas/InputImage",
1441
- "input_file": "#/components/schemas/InputFile",
1442
- "input_audio": "#/components/schemas/InputAudio"
1443
- }
1444
- }
1445
- }
1446
- }
1447
- },
1448
- "required": [
1449
- "id",
1450
- "role",
1451
- "content"
1452
- ]
1453
- },
1454
- {
1455
- "type": "object",
1456
- "properties": {
1457
- "type": {
1458
- "type": "string",
1459
- "enum": [
1460
- "function_call_output"
1461
- ]
1462
- },
1463
- "id": {
1464
- "type": "string",
1465
- "nullable": true
1466
- },
1467
- "call_id": {
1468
- "type": "string"
1469
- },
1470
- "output": {
1471
- "anyOf": [
1472
- {
1473
- "type": "string"
1474
- },
1475
- {
1476
- "type": "array",
1477
- "items": {
1478
- "oneOf": [
1479
- {
1480
- "$ref": "#/components/schemas/InputText"
1481
- },
1482
- {
1483
- "$ref": "#/components/schemas/InputImage"
1484
- },
1485
- {
1486
- "$ref": "#/components/schemas/InputFile"
1487
- }
1488
- ],
1489
- "discriminator": {
1490
- "propertyName": "type",
1491
- "mapping": {
1492
- "input_text": "#/components/schemas/InputText",
1493
- "input_image": "#/components/schemas/InputImage",
1494
- "input_file": "#/components/schemas/InputFile"
1495
- }
1496
- }
1497
- }
1498
- }
1499
- ]
1500
- },
1501
- "status": {
1502
- "$ref": "#/components/schemas/ToolCallStatusEnum"
1503
- }
1504
- },
1505
- "required": [
1506
- "type",
1507
- "call_id",
1508
- "output"
1509
- ]
1510
- },
1511
- {
1512
- "type": "object",
1513
- "properties": {
1514
- "type": {
1515
- "type": "string",
1516
- "enum": [
1517
- "function_call"
1518
- ]
1519
- },
1520
- "call_id": {
1521
- "type": "string"
1522
- },
1523
- "name": {
1524
- "type": "string"
1525
- },
1526
- "arguments": {
1527
- "type": "string"
1528
- },
1529
- "id": {
1530
- "type": "string"
1531
- },
1532
- "status": {
1533
- "$ref": "#/components/schemas/ToolCallStatusEnum"
1534
- }
1535
- },
1536
- "required": [
1537
- "type",
1538
- "call_id",
1539
- "name",
1540
- "arguments"
1541
- ]
1542
- },
1543
- {
1544
- "$ref": "#/components/schemas/OutputItemImageGenerationCall"
1545
- },
1546
- {
1547
- "$ref": "#/components/schemas/OutputMessage"
1548
- }
1549
- ]
1550
- }
1551
- },
1552
- {
1553
- "nullable": true
1554
- }
1555
- ]
1556
- },
1557
- "RequestMetadata": {
1558
- "type": "object",
1559
- "nullable": true,
1560
- "additionalProperties": {
1561
- "type": "string",
1562
- "maxLength": 512
1563
- },
1564
- "description": "Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must be ≤512 characters. Maximum 16 pairs allowed.",
1565
- "example": {
1566
- "user_id": "123",
1567
- "session_id": "abc-def-ghi"
1568
- }
1569
- },
1570
- "FunctionTool": {
1571
- "type": "object",
1572
- "properties": {
1573
- "type": {
1574
- "type": "string",
1575
- "enum": [
1576
- "function"
1577
- ]
1578
- },
1579
- "name": {
1580
- "type": "string"
1581
- },
1582
- "description": {
1583
- "type": "string",
1584
- "nullable": true
1585
- },
1586
- "strict": {
1587
- "type": "boolean",
1588
- "nullable": true
1589
- },
1590
- "parameters": {
1591
- "type": "object",
1592
- "nullable": true,
1593
- "additionalProperties": {
1594
- "nullable": true
1595
- }
1596
- }
1597
- },
1598
- "required": [
1599
- "type",
1600
- "name",
1601
- "parameters"
1602
- ],
1603
- "description": "Function tool definition",
1604
- "example": {
1605
- "type": "function",
1606
- "name": "get_weather",
1607
- "description": "Get the current weather in a location",
1608
- "parameters": {
1609
- "type": "object",
1610
- "properties": {
1611
- "location": {
1612
- "type": "string",
1613
- "description": "The city and state"
1614
- },
1615
- "unit": {
1616
- "type": "string",
1617
- "enum": [
1618
- "celsius",
1619
- "fahrenheit"
1620
- ],
1621
- "x-speakeasy-unknown-values": "allow"
1622
- }
1623
- },
1624
- "required": [
1625
- "location"
1626
- ]
1627
- }
1628
- }
1629
- },
1630
- "SearchContextSizeEnum": {
1631
- "type": "string",
1632
- "enum": [
1633
- "low",
1634
- "medium",
1635
- "high"
1636
- ],
1637
- "description": "Size of the search context for web search tools",
1638
- "example": "medium",
1639
- "x-speakeasy-unknown-values": "allow"
1640
- },
1641
- "Preview_WebSearchUserLocation": {
1642
- "type": "object",
1643
- "nullable": true,
1644
- "properties": {
1645
- "type": {
1646
- "type": "string",
1647
- "enum": [
1648
- "approximate"
1649
- ]
1650
- },
1651
- "city": {
1652
- "type": "string",
1653
- "nullable": true
1654
- },
1655
- "country": {
1656
- "type": "string",
1657
- "nullable": true
1658
- },
1659
- "region": {
1660
- "type": "string",
1661
- "nullable": true
1662
- },
1663
- "timezone": {
1664
- "type": "string",
1665
- "nullable": true
1666
- }
1667
- },
1668
- "required": [
1669
- "type"
1670
- ]
1671
- },
1672
- "Preview_WebSearchServerTool": {
1673
- "type": "object",
1674
- "properties": {
1675
- "type": {
1676
- "type": "string",
1677
- "enum": [
1678
- "web_search_preview"
1679
- ]
1680
- },
1681
- "search_context_size": {
1682
- "$ref": "#/components/schemas/SearchContextSizeEnum"
1683
- },
1684
- "user_location": {
1685
- "$ref": "#/components/schemas/Preview_WebSearchUserLocation"
1686
- },
1687
- "engine": {
1688
- "type": "string",
1689
- "enum": [
1690
- "auto",
1691
- "native",
1692
- "exa",
1693
- "firecrawl",
1694
- "parallel"
1695
- ],
1696
- "description": "Which search engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in search. \"exa\" forces the Exa search API. \"firecrawl\" uses Firecrawl (requires BYOK). \"parallel\" uses the Parallel search API.",
1697
- "example": "auto",
1698
- "x-speakeasy-unknown-values": "allow"
1699
- },
1700
- "max_results": {
1701
- "type": "number",
1702
- "minimum": 1,
1703
- "maximum": 25,
1704
- "description": "Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, and Parallel engines; ignored with native provider search.",
1705
- "example": 5
1706
- },
1707
- "filters": {
1708
- "type": "object",
1709
- "nullable": true,
1710
- "properties": {
1711
- "allowed_domains": {
1712
- "type": "array",
1713
- "nullable": true,
1714
- "items": {
1715
- "type": "string"
1716
- }
1717
- },
1718
- "excluded_domains": {
1719
- "type": "array",
1720
- "nullable": true,
1721
- "items": {
1722
- "type": "string"
1723
- }
1724
- }
1725
- }
1726
- }
1727
- },
1728
- "required": [
1729
- "type"
1730
- ],
1731
- "description": "Web search preview tool configuration",
1732
- "example": {
1733
- "type": "web_search_preview"
1734
- }
1735
- },
1736
- "Preview_20250311_WebSearchServerTool": {
1737
- "type": "object",
1738
- "properties": {
1739
- "type": {
1740
- "type": "string",
1741
- "enum": [
1742
- "web_search_preview_2025_03_11"
1743
- ]
1744
- },
1745
- "search_context_size": {
1746
- "$ref": "#/components/schemas/SearchContextSizeEnum"
1747
- },
1748
- "user_location": {
1749
- "$ref": "#/components/schemas/Preview_WebSearchUserLocation"
1750
- },
1751
- "engine": {
1752
- "type": "string",
1753
- "enum": [
1754
- "auto",
1755
- "native",
1756
- "exa",
1757
- "firecrawl",
1758
- "parallel"
1759
- ],
1760
- "description": "Which search engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in search. \"exa\" forces the Exa search API. \"firecrawl\" uses Firecrawl (requires BYOK). \"parallel\" uses the Parallel search API.",
1761
- "example": "auto",
1762
- "x-speakeasy-unknown-values": "allow"
1763
- },
1764
- "max_results": {
1765
- "type": "number",
1766
- "minimum": 1,
1767
- "maximum": 25,
1768
- "description": "Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, and Parallel engines; ignored with native provider search.",
1769
- "example": 5
1770
- },
1771
- "filters": {
1772
- "type": "object",
1773
- "nullable": true,
1774
- "properties": {
1775
- "allowed_domains": {
1776
- "type": "array",
1777
- "nullable": true,
1778
- "items": {
1779
- "type": "string"
1780
- }
1781
- },
1782
- "excluded_domains": {
1783
- "type": "array",
1784
- "nullable": true,
1785
- "items": {
1786
- "type": "string"
1787
- }
1788
- }
1789
- }
1790
- }
1791
- },
1792
- "required": [
1793
- "type"
1794
- ],
1795
- "description": "Web search preview tool configuration (2025-03-11 version)",
1796
- "example": {
1797
- "type": "web_search_preview_2025_03_11"
1798
- }
1799
- },
1800
- "WebSearchUserLocation": {
1801
- "type": "object",
1802
- "nullable": true,
1803
- "properties": {
1804
- "type": {
1805
- "type": "string",
1806
- "enum": [
1807
- "approximate"
1808
- ]
1809
- },
1810
- "city": {
1811
- "type": "string",
1812
- "nullable": true
1813
- },
1814
- "country": {
1815
- "type": "string",
1816
- "nullable": true
1817
- },
1818
- "region": {
1819
- "type": "string",
1820
- "nullable": true
1821
- },
1822
- "timezone": {
1823
- "type": "string",
1824
- "nullable": true
1825
- }
1826
- },
1827
- "description": "User location information for web search",
1828
- "example": {
1829
- "type": "approximate",
1830
- "city": "San Francisco",
1831
- "country": "USA",
1832
- "region": "California",
1833
- "timezone": "America/Los_Angeles"
1834
- }
1835
- },
1836
- "Legacy_WebSearchServerTool": {
1837
- "type": "object",
1838
- "properties": {
1839
- "type": {
1840
- "type": "string",
1841
- "enum": [
1842
- "web_search"
1843
- ]
1844
- },
1845
- "filters": {
1846
- "type": "object",
1847
- "nullable": true,
1848
- "properties": {
1849
- "allowed_domains": {
1850
- "type": "array",
1851
- "nullable": true,
1852
- "items": {
1853
- "type": "string"
1854
- }
1855
- },
1856
- "excluded_domains": {
1857
- "type": "array",
1858
- "nullable": true,
1859
- "items": {
1860
- "type": "string"
1861
- }
1862
- }
1863
- }
1864
- },
1865
- "search_context_size": {
1866
- "$ref": "#/components/schemas/SearchContextSizeEnum"
1867
- },
1868
- "user_location": {
1869
- "$ref": "#/components/schemas/WebSearchUserLocation"
1870
- },
1871
- "engine": {
1872
- "type": "string",
1873
- "enum": [
1874
- "auto",
1875
- "native",
1876
- "exa",
1877
- "firecrawl",
1878
- "parallel"
1879
- ],
1880
- "description": "Which search engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in search. \"exa\" forces the Exa search API. \"firecrawl\" uses Firecrawl (requires BYOK). \"parallel\" uses the Parallel search API.",
1881
- "example": "auto",
1882
- "x-speakeasy-unknown-values": "allow"
1883
- },
1884
- "max_results": {
1885
- "type": "number",
1886
- "minimum": 1,
1887
- "maximum": 25,
1888
- "description": "Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, and Parallel engines; ignored with native provider search.",
1889
- "example": 5
1890
- }
1891
- },
1892
- "required": [
1893
- "type"
1894
- ],
1895
- "description": "Web search tool configuration",
1896
- "example": {
1897
- "type": "web_search",
1898
- "engine": "auto",
1899
- "filters": {
1900
- "allowed_domains": [
1901
- "example.com"
1902
- ]
1903
- }
1904
- }
1905
- },
1906
- "WebSearchServerTool": {
1907
- "type": "object",
1908
- "properties": {
1909
- "type": {
1910
- "type": "string",
1911
- "enum": [
1912
- "web_search_2025_08_26"
1913
- ]
1914
- },
1915
- "filters": {
1916
- "type": "object",
1917
- "nullable": true,
1918
- "properties": {
1919
- "allowed_domains": {
1920
- "type": "array",
1921
- "nullable": true,
1922
- "items": {
1923
- "type": "string"
1924
- }
1925
- },
1926
- "excluded_domains": {
1927
- "type": "array",
1928
- "nullable": true,
1929
- "items": {
1930
- "type": "string"
1931
- }
1932
- }
1933
- }
1934
- },
1935
- "search_context_size": {
1936
- "$ref": "#/components/schemas/SearchContextSizeEnum"
1937
- },
1938
- "user_location": {
1939
- "$ref": "#/components/schemas/WebSearchUserLocation"
1940
- },
1941
- "engine": {
1942
- "type": "string",
1943
- "enum": [
1944
- "auto",
1945
- "native",
1946
- "exa",
1947
- "firecrawl",
1948
- "parallel"
1949
- ],
1950
- "description": "Which search engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in search. \"exa\" forces the Exa search API. \"firecrawl\" uses Firecrawl (requires BYOK). \"parallel\" uses the Parallel search API.",
1951
- "example": "auto",
1952
- "x-speakeasy-unknown-values": "allow"
1953
- },
1954
- "max_results": {
1955
- "type": "number",
1956
- "minimum": 1,
1957
- "maximum": 25,
1958
- "description": "Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, and Parallel engines; ignored with native provider search.",
1959
- "example": 5
1960
- }
1961
- },
1962
- "required": [
1963
- "type"
1964
- ],
1965
- "description": "Web search tool configuration (2025-08-26 version)",
1966
- "example": {
1967
- "type": "web_search_2025_08_26",
1968
- "engine": "auto",
1969
- "filters": {
1970
- "allowed_domains": [
1971
- "example.com"
1972
- ]
1973
- }
1974
- }
1975
- },
1976
- "CompoundFilter": {
1977
- "type": "object",
1978
- "properties": {
1979
- "type": {
1980
- "type": "string",
1981
- "enum": [
1982
- "and",
1983
- "or"
1984
- ],
1985
- "x-speakeasy-unknown-values": "allow"
1986
- },
1987
- "filters": {
1988
- "type": "array",
1989
- "items": {
1990
- "type": "object",
1991
- "additionalProperties": {
1992
- "nullable": true
1993
- }
1994
- }
1995
- }
1996
- },
1997
- "required": [
1998
- "type",
1999
- "filters"
2000
- ],
2001
- "description": "A compound filter that combines multiple comparison or compound filters"
2002
- },
2003
- "FileSearchServerTool": {
2004
- "type": "object",
2005
- "properties": {
2006
- "type": {
2007
- "type": "string",
2008
- "enum": [
2009
- "file_search"
2010
- ]
2011
- },
2012
- "vector_store_ids": {
2013
- "type": "array",
2014
- "items": {
2015
- "type": "string"
2016
- }
2017
- },
2018
- "filters": {
2019
- "anyOf": [
2020
- {
2021
- "type": "object",
2022
- "properties": {
2023
- "key": {
2024
- "type": "string"
2025
- },
2026
- "type": {
2027
- "type": "string",
2028
- "enum": [
2029
- "eq",
2030
- "ne",
2031
- "gt",
2032
- "gte",
2033
- "lt",
2034
- "lte"
2035
- ],
2036
- "x-speakeasy-unknown-values": "allow"
2037
- },
2038
- "value": {
2039
- "anyOf": [
2040
- {
2041
- "type": "string"
2042
- },
2043
- {
2044
- "type": "number",
2045
- "format": "double"
2046
- },
2047
- {
2048
- "type": "boolean"
2049
- },
2050
- {
2051
- "type": "array",
2052
- "items": {
2053
- "anyOf": [
2054
- {
2055
- "type": "string"
2056
- },
2057
- {
2058
- "type": "number",
2059
- "format": "double"
2060
- }
2061
- ]
2062
- }
2063
- }
2064
- ]
2065
- }
2066
- },
2067
- "required": [
2068
- "key",
2069
- "type",
2070
- "value"
2071
- ]
2072
- },
2073
- {
2074
- "$ref": "#/components/schemas/CompoundFilter"
2075
- },
2076
- {
2077
- "nullable": true
2078
- }
2079
- ]
2080
- },
2081
- "max_num_results": {
2082
- "type": "integer"
2083
- },
2084
- "ranking_options": {
2085
- "type": "object",
2086
- "properties": {
2087
- "ranker": {
2088
- "type": "string",
2089
- "enum": [
2090
- "auto",
2091
- "default-2024-11-15"
2092
- ],
2093
- "x-speakeasy-unknown-values": "allow"
2094
- },
2095
- "score_threshold": {
2096
- "type": "number",
2097
- "format": "double"
2098
- }
2099
- }
2100
- }
2101
- },
2102
- "required": [
2103
- "type",
2104
- "vector_store_ids"
2105
- ],
2106
- "description": "File search tool configuration",
2107
- "example": {
2108
- "type": "file_search",
2109
- "vector_store_ids": [
2110
- "vs_abc123"
2111
- ]
2112
- }
2113
- },
2114
- "ComputerUseServerTool": {
2115
- "type": "object",
2116
- "properties": {
2117
- "type": {
2118
- "type": "string",
2119
- "enum": [
2120
- "computer_use_preview"
2121
- ]
2122
- },
2123
- "display_height": {
2124
- "type": "integer"
2125
- },
2126
- "display_width": {
2127
- "type": "integer"
2128
- },
2129
- "environment": {
2130
- "type": "string",
2131
- "enum": [
2132
- "windows",
2133
- "mac",
2134
- "linux",
2135
- "ubuntu",
2136
- "browser"
2137
- ],
2138
- "x-speakeasy-unknown-values": "allow"
2139
- }
2140
- },
2141
- "required": [
2142
- "type",
2143
- "display_height",
2144
- "display_width",
2145
- "environment"
2146
- ],
2147
- "description": "Computer use preview tool configuration",
2148
- "example": {
2149
- "type": "computer_use_preview",
2150
- "display_height": 768,
2151
- "display_width": 1024,
2152
- "environment": "linux"
2153
- }
2154
- },
2155
- "CodeInterpreterServerTool": {
2156
- "type": "object",
2157
- "properties": {
2158
- "type": {
2159
- "type": "string",
2160
- "enum": [
2161
- "code_interpreter"
2162
- ]
2163
- },
2164
- "container": {
2165
- "anyOf": [
2166
- {
2167
- "type": "string"
2168
- },
2169
- {
2170
- "type": "object",
2171
- "properties": {
2172
- "type": {
2173
- "type": "string",
2174
- "enum": [
2175
- "auto"
2176
- ]
2177
- },
2178
- "file_ids": {
2179
- "type": "array",
2180
- "items": {
2181
- "type": "string"
2182
- }
2183
- },
2184
- "memory_limit": {
2185
- "type": "string",
2186
- "nullable": true,
2187
- "enum": [
2188
- "1g",
2189
- "4g",
2190
- "16g",
2191
- "64g"
2192
- ],
2193
- "x-speakeasy-unknown-values": "allow"
2194
- }
2195
- },
2196
- "required": [
2197
- "type"
2198
- ]
2199
- }
2200
- ]
2201
- }
2202
- },
2203
- "required": [
2204
- "type",
2205
- "container"
2206
- ],
2207
- "description": "Code interpreter tool configuration",
2208
- "example": {
2209
- "type": "code_interpreter",
2210
- "container": "auto"
2211
- }
2212
- },
2213
- "McpServerTool": {
2214
- "type": "object",
2215
- "properties": {
2216
- "type": {
2217
- "type": "string",
2218
- "enum": [
2219
- "mcp"
2220
- ]
2221
- },
2222
- "server_label": {
2223
- "type": "string"
2224
- },
2225
- "allowed_tools": {
2226
- "anyOf": [
2227
- {
2228
- "type": "array",
2229
- "items": {
2230
- "type": "string"
2231
- }
2232
- },
2233
- {
2234
- "type": "object",
2235
- "properties": {
2236
- "tool_names": {
2237
- "type": "array",
2238
- "items": {
2239
- "type": "string"
2240
- }
2241
- },
2242
- "read_only": {
2243
- "type": "boolean"
2244
- }
2245
- }
2246
- },
2247
- {
2248
- "nullable": true
2249
- },
2250
- {
2251
- "nullable": true
2252
- }
2253
- ]
2254
- },
2255
- "authorization": {
2256
- "type": "string"
2257
- },
2258
- "connector_id": {
2259
- "type": "string",
2260
- "enum": [
2261
- "connector_dropbox",
2262
- "connector_gmail",
2263
- "connector_googlecalendar",
2264
- "connector_googledrive",
2265
- "connector_microsoftteams",
2266
- "connector_outlookcalendar",
2267
- "connector_outlookemail",
2268
- "connector_sharepoint"
2269
- ],
2270
- "x-speakeasy-unknown-values": "allow"
2271
- },
2272
- "headers": {
2273
- "type": "object",
2274
- "nullable": true,
2275
- "additionalProperties": {
2276
- "type": "string"
2277
- }
2278
- },
2279
- "require_approval": {
2280
- "anyOf": [
2281
- {
2282
- "type": "object",
2283
- "properties": {
2284
- "never": {
2285
- "type": "object",
2286
- "properties": {
2287
- "tool_names": {
2288
- "type": "array",
2289
- "items": {
2290
- "type": "string"
2291
- }
2292
- }
2293
- }
2294
- },
2295
- "always": {
2296
- "type": "object",
2297
- "properties": {
2298
- "tool_names": {
2299
- "type": "array",
2300
- "items": {
2301
- "type": "string"
2302
- }
2303
- }
2304
- }
2305
- }
2306
- }
2307
- },
2308
- {
2309
- "type": "string",
2310
- "enum": [
2311
- "always"
2312
- ]
2313
- },
2314
- {
2315
- "type": "string",
2316
- "enum": [
2317
- "never"
2318
- ]
2319
- },
2320
- {
2321
- "nullable": true
2322
- },
2323
- {
2324
- "nullable": true
2325
- }
2326
- ]
2327
- },
2328
- "server_description": {
2329
- "type": "string"
2330
- },
2331
- "server_url": {
2332
- "type": "string"
2333
- }
2334
- },
2335
- "required": [
2336
- "type",
2337
- "server_label"
2338
- ],
2339
- "description": "MCP (Model Context Protocol) tool configuration",
2340
- "example": {
2341
- "type": "mcp",
2342
- "server_label": "my-server",
2343
- "server_url": "https://example.com/mcp"
2344
- }
2345
- },
2346
- "ImageGenerationServerTool": {
2347
- "type": "object",
2348
- "properties": {
2349
- "type": {
2350
- "type": "string",
2351
- "enum": [
2352
- "image_generation"
2353
- ]
2354
- },
2355
- "background": {
2356
- "type": "string",
2357
- "enum": [
2358
- "transparent",
2359
- "opaque",
2360
- "auto"
2361
- ],
2362
- "x-speakeasy-unknown-values": "allow"
2363
- },
2364
- "input_fidelity": {
2365
- "type": "string",
2366
- "nullable": true,
2367
- "enum": [
2368
- "high",
2369
- "low"
2370
- ],
2371
- "x-speakeasy-unknown-values": "allow"
2372
- },
2373
- "input_image_mask": {
2374
- "type": "object",
2375
- "properties": {
2376
- "image_url": {
2377
- "type": "string"
2378
- },
2379
- "file_id": {
2380
- "type": "string"
2381
- }
2382
- }
2383
- },
2384
- "model": {
2385
- "type": "string",
2386
- "enum": [
2387
- "gpt-image-1",
2388
- "gpt-image-1-mini"
2389
- ],
2390
- "x-speakeasy-unknown-values": "allow"
2391
- },
2392
- "moderation": {
2393
- "type": "string",
2394
- "enum": [
2395
- "auto",
2396
- "low"
2397
- ],
2398
- "x-speakeasy-unknown-values": "allow"
2399
- },
2400
- "output_compression": {
2401
- "type": "integer"
2402
- },
2403
- "output_format": {
2404
- "type": "string",
2405
- "enum": [
2406
- "png",
2407
- "webp",
2408
- "jpeg"
2409
- ],
2410
- "x-speakeasy-unknown-values": "allow"
2411
- },
2412
- "partial_images": {
2413
- "type": "integer"
2414
- },
2415
- "quality": {
2416
- "type": "string",
2417
- "enum": [
2418
- "low",
2419
- "medium",
2420
- "high",
2421
- "auto"
2422
- ],
2423
- "x-speakeasy-unknown-values": "allow"
2424
- },
2425
- "size": {
2426
- "type": "string",
2427
- "enum": [
2428
- "1024x1024",
2429
- "1024x1536",
2430
- "1536x1024",
2431
- "auto"
2432
- ],
2433
- "x-speakeasy-unknown-values": "allow"
2434
- }
2435
- },
2436
- "required": [
2437
- "type"
2438
- ],
2439
- "description": "Image generation tool configuration",
2440
- "example": {
2441
- "type": "image_generation",
2442
- "quality": "high"
2443
- }
2444
- },
2445
- "CodexLocalShellTool": {
2446
- "type": "object",
2447
- "properties": {
2448
- "type": {
2449
- "type": "string",
2450
- "enum": [
2451
- "local_shell"
2452
- ]
2453
- }
2454
- },
2455
- "required": [
2456
- "type"
2457
- ],
2458
- "description": "Local shell tool configuration",
2459
- "example": {
2460
- "type": "local_shell"
2461
- }
2462
- },
2463
- "ShellServerTool": {
2464
- "type": "object",
2465
- "properties": {
2466
- "type": {
2467
- "type": "string",
2468
- "enum": [
2469
- "shell"
2470
- ]
2471
- }
2472
- },
2473
- "required": [
2474
- "type"
2475
- ],
2476
- "description": "Shell tool configuration",
2477
- "example": {
2478
- "type": "shell"
2479
- }
2480
- },
2481
- "ApplyPatchServerTool": {
2482
- "type": "object",
2483
- "properties": {
2484
- "type": {
2485
- "type": "string",
2486
- "enum": [
2487
- "apply_patch"
2488
- ]
2489
- }
2490
- },
2491
- "required": [
2492
- "type"
2493
- ],
2494
- "description": "Apply patch tool configuration",
2495
- "example": {
2496
- "type": "apply_patch"
2497
- }
2498
- },
2499
- "CustomTool": {
2500
- "type": "object",
2501
- "properties": {
2502
- "type": {
2503
- "type": "string",
2504
- "enum": [
2505
- "custom"
2506
- ]
2507
- },
2508
- "name": {
2509
- "type": "string"
2510
- },
2511
- "description": {
2512
- "type": "string"
2513
- },
2514
- "format": {
2515
- "anyOf": [
2516
- {
2517
- "type": "object",
2518
- "properties": {
2519
- "type": {
2520
- "type": "string",
2521
- "enum": [
2522
- "text"
2523
- ]
2524
- }
2525
- },
2526
- "required": [
2527
- "type"
2528
- ]
2529
- },
2530
- {
2531
- "type": "object",
2532
- "properties": {
2533
- "type": {
2534
- "type": "string",
2535
- "enum": [
2536
- "grammar"
2537
- ]
2538
- },
2539
- "definition": {
2540
- "type": "string"
2541
- },
2542
- "syntax": {
2543
- "type": "string",
2544
- "enum": [
2545
- "lark",
2546
- "regex"
2547
- ],
2548
- "x-speakeasy-unknown-values": "allow"
2549
- }
2550
- },
2551
- "required": [
2552
- "type",
2553
- "definition",
2554
- "syntax"
2555
- ]
2556
- }
2557
- ]
2558
- }
2559
- },
2560
- "required": [
2561
- "type",
2562
- "name"
2563
- ],
2564
- "description": "Custom tool configuration",
2565
- "example": {
2566
- "type": "custom",
2567
- "name": "my_tool"
2568
- }
2569
- },
2570
- "ToolChoiceAllowed": {
2571
- "type": "object",
2572
- "properties": {
2573
- "type": {
2574
- "type": "string",
2575
- "enum": [
2576
- "allowed_tools"
2577
- ]
2578
- },
2579
- "mode": {
2580
- "anyOf": [
2581
- {
2582
- "type": "string",
2583
- "enum": [
2584
- "auto"
2585
- ]
2586
- },
2587
- {
2588
- "type": "string",
2589
- "enum": [
2590
- "required"
2591
- ]
2592
- }
2593
- ]
2594
- },
2595
- "tools": {
2596
- "type": "array",
2597
- "items": {
2598
- "type": "object",
2599
- "additionalProperties": {
2600
- "nullable": true
2601
- }
2602
- }
2603
- }
2604
- },
2605
- "required": [
2606
- "type",
2607
- "mode",
2608
- "tools"
2609
- ],
2610
- "description": "Constrains the model to a pre-defined set of allowed tools",
2611
- "example": {
2612
- "type": "allowed_tools",
2613
- "mode": "auto",
2614
- "tools": [
2615
- {
2616
- "type": "function",
2617
- "name": "get_weather"
2618
- }
2619
- ]
2620
- }
2621
- },
2622
- "OpenAIResponsesToolChoice": {
2623
- "anyOf": [
2624
- {
2625
- "type": "string",
2626
- "enum": [
2627
- "auto"
2628
- ]
2629
- },
2630
- {
2631
- "type": "string",
2632
- "enum": [
2633
- "none"
2634
- ]
2635
- },
2636
- {
2637
- "type": "string",
2638
- "enum": [
2639
- "required"
2640
- ]
2641
- },
2642
- {
2643
- "type": "object",
2644
- "properties": {
2645
- "type": {
2646
- "type": "string",
2647
- "enum": [
2648
- "function"
2649
- ]
2650
- },
2651
- "name": {
2652
- "type": "string"
2653
- }
2654
- },
2655
- "required": [
2656
- "type",
2657
- "name"
2658
- ]
2659
- },
2660
- {
2661
- "type": "object",
2662
- "properties": {
2663
- "type": {
2664
- "anyOf": [
2665
- {
2666
- "type": "string",
2667
- "enum": [
2668
- "web_search_preview_2025_03_11"
2669
- ]
2670
- },
2671
- {
2672
- "type": "string",
2673
- "enum": [
2674
- "web_search_preview"
2675
- ]
2676
- }
2677
- ]
2678
- }
2679
- },
2680
- "required": [
2681
- "type"
2682
- ]
2683
- },
2684
- {
2685
- "$ref": "#/components/schemas/ToolChoiceAllowed"
2686
- }
2687
- ]
2688
- },
2689
- "StoredPromptTemplate": {
2690
- "type": "object",
2691
- "nullable": true,
2692
- "properties": {
2693
- "id": {
2694
- "type": "string"
2695
- },
2696
- "variables": {
2697
- "type": "object",
2698
- "nullable": true,
2699
- "additionalProperties": {
2700
- "anyOf": [
2701
- {
2702
- "type": "string"
2703
- },
2704
- {
2705
- "$ref": "#/components/schemas/InputText"
2706
- },
2707
- {
2708
- "$ref": "#/components/schemas/InputImage"
2709
- },
2710
- {
2711
- "$ref": "#/components/schemas/InputFile"
2712
- }
2713
- ]
2714
- }
2715
- }
2716
- },
2717
- "required": [
2718
- "id"
2719
- ]
2720
- },
2721
- "ReasoningEffortEnum": {
2722
- "type": "string",
2723
- "nullable": true,
2724
- "enum": [
2725
- "xhigh",
2726
- "high",
2727
- "medium",
2728
- "low",
2729
- "minimal",
2730
- "none"
2731
- ],
2732
- "x-speakeasy-unknown-values": "allow"
2733
- },
2734
- "ReasoningSummaryVerbosityEnum": {
2735
- "type": "string",
2736
- "nullable": true,
2737
- "enum": [
2738
- "auto",
2739
- "concise",
2740
- "detailed"
2741
- ],
2742
- "example": "auto",
2743
- "x-speakeasy-unknown-values": "allow"
2744
- },
2745
- "BaseReasoningConfig": {
2746
- "type": "object",
2747
- "nullable": true,
2748
- "properties": {
2749
- "effort": {
2750
- "$ref": "#/components/schemas/ReasoningEffortEnum"
2751
- },
2752
- "summary": {
2753
- "$ref": "#/components/schemas/ReasoningSummaryVerbosityEnum"
2754
- }
2755
- }
2756
- },
2757
- "TruncationEnum": {
2758
- "type": "string",
2759
- "nullable": true,
2760
- "enum": [
2761
- "auto",
2762
- "disabled"
2763
- ],
2764
- "x-speakeasy-unknown-values": "allow"
2765
- },
2766
- "FormatTextConfig": {
2767
- "type": "object",
2768
- "properties": {
2769
- "type": {
2770
- "type": "string",
2771
- "enum": [
2772
- "text"
2773
- ]
2774
- }
2775
- },
2776
- "required": [
2777
- "type"
2778
- ],
2779
- "description": "Plain text response format",
2780
- "example": {
2781
- "type": "text"
2782
- }
2783
- },
2784
- "FormatJsonObjectConfig": {
2785
- "type": "object",
2786
- "properties": {
2787
- "type": {
2788
- "type": "string",
2789
- "enum": [
2790
- "json_object"
2791
- ]
2792
- }
2793
- },
2794
- "required": [
2795
- "type"
2796
- ],
2797
- "description": "JSON object response format",
2798
- "example": {
2799
- "type": "json_object"
2800
- }
2801
- },
2802
- "FormatJsonSchemaConfig": {
2803
- "type": "object",
2804
- "properties": {
2805
- "type": {
2806
- "type": "string",
2807
- "enum": [
2808
- "json_schema"
2809
- ]
2810
- },
2811
- "name": {
2812
- "type": "string"
2813
- },
2814
- "description": {
2815
- "type": "string"
2816
- },
2817
- "strict": {
2818
- "type": "boolean",
2819
- "nullable": true
2820
- },
2821
- "schema": {
2822
- "type": "object",
2823
- "additionalProperties": {
2824
- "nullable": true
2825
- }
2826
- }
2827
- },
2828
- "required": [
2829
- "type",
2830
- "name",
2831
- "schema"
2832
- ],
2833
- "description": "JSON schema constrained response format",
2834
- "example": {
2835
- "type": "json_schema",
2836
- "name": "user_info",
2837
- "description": "User information schema",
2838
- "schema": {
2839
- "type": "object",
2840
- "properties": {
2841
- "name": {
2842
- "type": "string"
2843
- },
2844
- "age": {
2845
- "type": "number"
2846
- }
2847
- },
2848
- "required": [
2849
- "name"
2850
- ]
2851
- }
2852
- }
2853
- },
2854
- "Formats": {
2855
- "anyOf": [
2856
- {
2857
- "$ref": "#/components/schemas/FormatTextConfig"
2858
- },
2859
- {
2860
- "$ref": "#/components/schemas/FormatJsonObjectConfig"
2861
- },
2862
- {
2863
- "$ref": "#/components/schemas/FormatJsonSchemaConfig"
2864
- }
2865
- ],
2866
- "description": "Text response format configuration",
2867
- "example": {
2868
- "type": "text"
2869
- }
2870
- },
2871
- "TextConfig": {
2872
- "type": "object",
2873
- "properties": {
2874
- "format": {
2875
- "$ref": "#/components/schemas/Formats"
2876
- },
2877
- "verbosity": {
2878
- "type": "string",
2879
- "nullable": true,
2880
- "enum": [
2881
- "high",
2882
- "low",
2883
- "medium"
2884
- ],
2885
- "x-speakeasy-unknown-values": "allow"
2886
- }
2887
- },
2888
- "description": "Text output configuration including format and verbosity",
2889
- "example": {
2890
- "format": {
2891
- "type": "text"
2892
- },
2893
- "verbosity": "medium"
2894
- }
2895
- },
2896
- "ServiceTierEnum": {
2897
- "type": "string",
2898
- "nullable": true,
2899
- "enum": [
2900
- "auto",
2901
- "default",
2902
- "flex",
2903
- "priority",
2904
- "scale"
2905
- ],
2906
- "x-speakeasy-unknown-values": "allow"
2907
- },
2908
- "BaseResponsesResult": {
2909
- "type": "object",
2910
- "properties": {
2911
- "id": {
2912
- "type": "string"
2913
- },
2914
- "object": {
2915
- "type": "string",
2916
- "enum": [
2917
- "response"
2918
- ]
2919
- },
2920
- "created_at": {
2921
- "type": "integer"
2922
- },
2923
- "model": {
2924
- "type": "string"
2925
- },
2926
- "status": {
2927
- "$ref": "#/components/schemas/OpenAIResponsesResponseStatus"
2928
- },
2929
- "completed_at": {
2930
- "type": "integer"
2931
- },
2932
- "output": {
2933
- "type": "array",
2934
- "items": {
2935
- "oneOf": [
2936
- {
2937
- "$ref": "#/components/schemas/OutputMessage"
2938
- },
2939
- {
2940
- "$ref": "#/components/schemas/OutputItemReasoning"
2941
- },
2942
- {
2943
- "$ref": "#/components/schemas/OutputItemFunctionCall"
2944
- },
2945
- {
2946
- "$ref": "#/components/schemas/OutputItemWebSearchCall"
2947
- },
2948
- {
2949
- "$ref": "#/components/schemas/OutputItemFileSearchCall"
2950
- },
2951
- {
2952
- "$ref": "#/components/schemas/OutputItemImageGenerationCall"
2953
- }
2954
- ],
2955
- "discriminator": {
2956
- "propertyName": "type",
2957
- "mapping": {
2958
- "message": "#/components/schemas/OutputMessage",
2959
- "reasoning": "#/components/schemas/OutputItemReasoning",
2960
- "function_call": "#/components/schemas/OutputItemFunctionCall",
2961
- "web_search_call": "#/components/schemas/OutputItemWebSearchCall",
2962
- "file_search_call": "#/components/schemas/OutputItemFileSearchCall",
2963
- "image_generation_call": "#/components/schemas/OutputItemImageGenerationCall"
2964
- }
2965
- }
2966
- }
2967
- },
2968
- "user": {
2969
- "type": "string",
2970
- "nullable": true
2971
- },
2972
- "output_text": {
2973
- "type": "string"
2974
- },
2975
- "prompt_cache_key": {
2976
- "type": "string",
2977
- "nullable": true
2978
- },
2979
- "safety_identifier": {
2980
- "type": "string",
2981
- "nullable": true
2982
- },
2983
- "error": {
2984
- "$ref": "#/components/schemas/ResponsesErrorField"
2985
- },
2986
- "incomplete_details": {
2987
- "$ref": "#/components/schemas/IncompleteDetails"
2988
- },
2989
- "usage": {
2990
- "$ref": "#/components/schemas/OpenAIResponsesUsage"
2991
- },
2992
- "max_tool_calls": {
2993
- "type": "integer"
2994
- },
2995
- "top_logprobs": {
2996
- "type": "integer"
2997
- },
2998
- "max_output_tokens": {
2999
- "type": "integer"
3000
- },
3001
- "temperature": {
3002
- "type": "number",
3003
- "format": "double"
3004
- },
3005
- "top_p": {
3006
- "type": "number",
3007
- "format": "double"
3008
- },
3009
- "presence_penalty": {
3010
- "type": "number",
3011
- "format": "double"
3012
- },
3013
- "frequency_penalty": {
3014
- "type": "number",
3015
- "format": "double"
3016
- },
3017
- "instructions": {
3018
- "$ref": "#/components/schemas/BaseInputs"
3019
- },
3020
- "metadata": {
3021
- "$ref": "#/components/schemas/RequestMetadata"
3022
- },
3023
- "tools": {
3024
- "type": "array",
3025
- "items": {
3026
- "oneOf": [
3027
- {
3028
- "allOf": [
3029
- {
3030
- "$ref": "#/components/schemas/FunctionTool"
3031
- },
3032
- {
3033
- "type": "object",
3034
- "properties": {}
3035
- }
3036
- ],
3037
- "description": "Function tool definition",
3038
- "example": {
3039
- "type": "function",
3040
- "name": "get_weather",
3041
- "description": "Get the current weather in a location",
3042
- "parameters": {
3043
- "type": "object",
3044
- "properties": {
3045
- "location": {
3046
- "type": "string",
3047
- "description": "The city and state"
3048
- },
3049
- "unit": {
3050
- "type": "string",
3051
- "enum": [
3052
- "celsius",
3053
- "fahrenheit"
3054
- ],
3055
- "x-speakeasy-unknown-values": "allow"
3056
- }
3057
- },
3058
- "required": [
3059
- "location"
3060
- ]
3061
- }
3062
- }
3063
- },
3064
- {
3065
- "$ref": "#/components/schemas/Preview_WebSearchServerTool"
3066
- },
3067
- {
3068
- "$ref": "#/components/schemas/Preview_20250311_WebSearchServerTool"
3069
- },
3070
- {
3071
- "$ref": "#/components/schemas/Legacy_WebSearchServerTool"
3072
- },
3073
- {
3074
- "$ref": "#/components/schemas/WebSearchServerTool"
3075
- },
3076
- {
3077
- "$ref": "#/components/schemas/FileSearchServerTool"
3078
- },
3079
- {
3080
- "$ref": "#/components/schemas/ComputerUseServerTool"
3081
- },
3082
- {
3083
- "$ref": "#/components/schemas/CodeInterpreterServerTool"
3084
- },
3085
- {
3086
- "$ref": "#/components/schemas/McpServerTool"
3087
- },
3088
- {
3089
- "$ref": "#/components/schemas/ImageGenerationServerTool"
3090
- },
3091
- {
3092
- "$ref": "#/components/schemas/CodexLocalShellTool"
3093
- },
3094
- {
3095
- "$ref": "#/components/schemas/ShellServerTool"
3096
- },
3097
- {
3098
- "$ref": "#/components/schemas/ApplyPatchServerTool"
3099
- },
3100
- {
3101
- "$ref": "#/components/schemas/CustomTool"
3102
- }
3103
- ]
3104
- }
3105
- },
3106
- "tool_choice": {
3107
- "$ref": "#/components/schemas/OpenAIResponsesToolChoice"
3108
- },
3109
- "parallel_tool_calls": {
3110
- "type": "boolean"
3111
- },
3112
- "prompt": {
3113
- "$ref": "#/components/schemas/StoredPromptTemplate"
3114
- },
3115
- "background": {
3116
- "type": "boolean",
3117
- "nullable": true
3118
- },
3119
- "previous_response_id": {
3120
- "type": "string",
3121
- "nullable": true
3122
- },
3123
- "reasoning": {
3124
- "$ref": "#/components/schemas/BaseReasoningConfig"
3125
- },
3126
- "service_tier": {
3127
- "$ref": "#/components/schemas/ServiceTierEnum"
3128
- },
3129
- "store": {
3130
- "type": "boolean"
3131
- },
3132
- "truncation": {
3133
- "$ref": "#/components/schemas/TruncationEnum"
3134
- },
3135
- "text": {
3136
- "$ref": "#/components/schemas/TextConfig"
3137
- }
3138
- },
3139
- "required": [
3140
- "id",
3141
- "object",
3142
- "created_at",
3143
- "model",
3144
- "status",
3145
- "completed_at",
3146
- "output",
3147
- "error",
3148
- "incomplete_details",
3149
- "temperature",
3150
- "top_p",
3151
- "presence_penalty",
3152
- "frequency_penalty",
3153
- "instructions",
3154
- "metadata",
3155
- "tools",
3156
- "tool_choice",
3157
- "parallel_tool_calls"
3158
- ]
3159
- },
3160
- "OpenResponsesResult": {
3161
- "allOf": [
3162
- {
3163
- "$ref": "#/components/schemas/BaseResponsesResult"
3164
- },
3165
- {
3166
- "type": "object",
3167
- "properties": {
3168
- "output": {
3169
- "type": "array",
3170
- "items": {
3171
- "$ref": "#/components/schemas/OutputItems"
3172
- }
3173
- },
3174
- "usage": {
3175
- "$ref": "#/components/schemas/Usage"
3176
- },
3177
- "service_tier": {
3178
- "type": "string",
3179
- "nullable": true
3180
- }
3181
- }
3182
- }
3183
- ],
3184
- "description": "Complete non-streaming response from the Responses API",
3185
- "example": {
3186
- "id": "resp-abc123",
3187
- "object": "response",
3188
- "created_at": 1704067200,
3189
- "model": "gpt-4",
3190
- "status": "completed",
3191
- "output": [
3192
- {
3193
- "type": "message",
3194
- "id": "msg-abc123",
3195
- "status": "completed",
3196
- "role": "assistant",
3197
- "content": [
3198
- {
3199
- "type": "output_text",
3200
- "text": "Hello! How can I help you today?",
3201
- "annotations": []
3202
- }
3203
- ]
3204
- }
3205
- ],
3206
- "usage": {
3207
- "input_tokens": 10,
3208
- "output_tokens": 25,
3209
- "total_tokens": 35,
3210
- "input_tokens_details": {
3211
- "cached_tokens": 0
3212
- },
3213
- "output_tokens_details": {
3214
- "reasoning_tokens": 0
3215
- }
3216
- },
3217
- "tools": [],
3218
- "tool_choice": "auto",
3219
- "parallel_tool_calls": true,
3220
- "error": null,
3221
- "incomplete_details": null,
3222
- "temperature": null,
3223
- "top_p": null,
3224
- "max_output_tokens": null,
3225
- "metadata": null,
3226
- "instructions": null
3227
- }
3228
- },
3229
- "CreatedEvent": {
3230
- "type": "object",
3231
- "properties": {
3232
- "type": {
3233
- "type": "string",
3234
- "enum": [
3235
- "response.created"
3236
- ]
3237
- },
3238
- "response": {
3239
- "$ref": "#/components/schemas/BaseResponsesResult"
3240
- },
3241
- "sequence_number": {
3242
- "type": "integer"
3243
- }
3244
- },
3245
- "required": [
3246
- "type",
3247
- "response",
3248
- "sequence_number"
3249
- ],
3250
- "description": "Event emitted when a response is created",
3251
- "example": {
3252
- "type": "response.created",
3253
- "response": {
3254
- "id": "resp-abc123",
3255
- "object": "response",
3256
- "created_at": 1704067200,
3257
- "model": "gpt-4",
3258
- "status": "in_progress",
3259
- "output": [],
3260
- "tools": [],
3261
- "tool_choice": "auto",
3262
- "parallel_tool_calls": true,
3263
- "error": null,
3264
- "incomplete_details": null,
3265
- "metadata": null,
3266
- "instructions": null,
3267
- "temperature": null,
3268
- "top_p": null,
3269
- "max_output_tokens": null
3270
- },
3271
- "sequence_number": 0
3272
- }
3273
- },
3274
- "InProgressEvent": {
3275
- "type": "object",
3276
- "properties": {
3277
- "type": {
3278
- "type": "string",
3279
- "enum": [
3280
- "response.in_progress"
3281
- ]
3282
- },
3283
- "response": {
3284
- "$ref": "#/components/schemas/BaseResponsesResult"
3285
- },
3286
- "sequence_number": {
3287
- "type": "integer"
3288
- }
3289
- },
3290
- "required": [
3291
- "type",
3292
- "response",
3293
- "sequence_number"
3294
- ],
3295
- "description": "Event emitted when a response is in progress",
3296
- "example": {
3297
- "type": "response.in_progress",
3298
- "response": {
3299
- "id": "resp-abc123",
3300
- "object": "response",
3301
- "created_at": 1704067200,
3302
- "model": "gpt-4",
3303
- "status": "in_progress",
3304
- "output": [],
3305
- "tools": [],
3306
- "tool_choice": "auto",
3307
- "parallel_tool_calls": true,
3308
- "error": null,
3309
- "incomplete_details": null,
3310
- "metadata": null,
3311
- "instructions": null,
3312
- "temperature": null,
3313
- "top_p": null,
3314
- "max_output_tokens": null
3315
- },
3316
- "sequence_number": 1
3317
- }
3318
- },
3319
- "CompletedEvent": {
3320
- "type": "object",
3321
- "properties": {
3322
- "type": {
3323
- "type": "string",
3324
- "enum": [
3325
- "response.completed"
3326
- ]
3327
- },
3328
- "response": {
3329
- "$ref": "#/components/schemas/BaseResponsesResult"
3330
- },
3331
- "sequence_number": {
3332
- "type": "integer"
3333
- }
3334
- },
3335
- "required": [
3336
- "type",
3337
- "response",
3338
- "sequence_number"
3339
- ],
3340
- "description": "Event emitted when a response has completed successfully",
3341
- "example": {
3342
- "type": "response.completed",
3343
- "response": {
3344
- "id": "resp-abc123",
3345
- "object": "response",
3346
- "created_at": 1704067200,
3347
- "model": "gpt-4",
3348
- "status": "completed",
3349
- "output": [
3350
- {
3351
- "id": "item-1",
3352
- "type": "message",
3353
- "status": "completed",
3354
- "role": "assistant",
3355
- "content": [
3356
- {
3357
- "type": "output_text",
3358
- "text": "Hello! How can I help you?",
3359
- "annotations": []
3360
- }
3361
- ]
3362
- }
3363
- ],
3364
- "tools": [],
3365
- "tool_choice": "auto",
3366
- "parallel_tool_calls": true,
3367
- "error": null,
3368
- "incomplete_details": null,
3369
- "metadata": null,
3370
- "instructions": null,
3371
- "temperature": null,
3372
- "top_p": null,
3373
- "max_output_tokens": null
3374
- },
3375
- "sequence_number": 10
3376
- }
3377
- },
3378
- "IncompleteEvent": {
3379
- "type": "object",
3380
- "properties": {
3381
- "type": {
3382
- "type": "string",
3383
- "enum": [
3384
- "response.incomplete"
3385
- ]
3386
- },
3387
- "response": {
3388
- "$ref": "#/components/schemas/BaseResponsesResult"
3389
- },
3390
- "sequence_number": {
3391
- "type": "integer"
3392
- }
3393
- },
3394
- "required": [
3395
- "type",
3396
- "response",
3397
- "sequence_number"
3398
- ],
3399
- "description": "Event emitted when a response is incomplete",
3400
- "example": {
3401
- "type": "response.incomplete",
3402
- "response": {
3403
- "id": "resp-abc123",
3404
- "object": "response",
3405
- "created_at": 1704067200,
3406
- "model": "gpt-4",
3407
- "status": "incomplete",
3408
- "output": [],
3409
- "tools": [],
3410
- "tool_choice": "auto",
3411
- "parallel_tool_calls": true,
3412
- "error": null,
3413
- "incomplete_details": null,
3414
- "metadata": null,
3415
- "instructions": null,
3416
- "temperature": null,
3417
- "top_p": null,
3418
- "max_output_tokens": null
3419
- },
3420
- "sequence_number": 5
3421
- }
3422
- },
3423
- "FailedEvent": {
3424
- "type": "object",
3425
- "properties": {
3426
- "type": {
3427
- "type": "string",
3428
- "enum": [
3429
- "response.failed"
3430
- ]
3431
- },
3432
- "response": {
3433
- "$ref": "#/components/schemas/BaseResponsesResult"
3434
- },
3435
- "sequence_number": {
3436
- "type": "integer"
3437
- }
3438
- },
3439
- "required": [
3440
- "type",
3441
- "response",
3442
- "sequence_number"
3443
- ],
3444
- "description": "Event emitted when a response has failed",
3445
- "example": {
3446
- "type": "response.failed",
3447
- "response": {
3448
- "id": "resp-abc123",
3449
- "object": "response",
3450
- "created_at": 1704067200,
3451
- "model": "gpt-4",
3452
- "status": "failed",
3453
- "output": [],
3454
- "tools": [],
3455
- "tool_choice": "auto",
3456
- "parallel_tool_calls": true,
3457
- "error": null,
3458
- "incomplete_details": null,
3459
- "metadata": null,
3460
- "instructions": null,
3461
- "temperature": null,
3462
- "top_p": null,
3463
- "max_output_tokens": null
3464
- },
3465
- "sequence_number": 3
3466
- }
3467
- },
3468
- "BaseErrorEvent": {
3469
- "type": "object",
3470
- "properties": {
3471
- "type": {
3472
- "type": "string",
3473
- "enum": [
3474
- "error"
3475
- ]
3476
- },
3477
- "code": {
3478
- "type": "string",
3479
- "nullable": true
3480
- },
3481
- "message": {
3482
- "type": "string"
3483
- },
3484
- "param": {
3485
- "type": "string",
3486
- "nullable": true
3487
- },
3488
- "sequence_number": {
3489
- "type": "integer"
3490
- }
3491
- },
3492
- "required": [
3493
- "type",
3494
- "code",
3495
- "message",
3496
- "param",
3497
- "sequence_number"
3498
- ],
3499
- "description": "Event emitted when an error occurs during streaming",
3500
- "example": {
3501
- "type": "error",
3502
- "code": "rate_limit_exceeded",
3503
- "message": "Rate limit exceeded. Please try again later.",
3504
- "param": null,
3505
- "sequence_number": 2
3506
- }
3507
- },
3508
- "ErrorEvent": {
3509
- "allOf": [
3510
- {
3511
- "$ref": "#/components/schemas/BaseErrorEvent"
3512
- },
3513
- {
3514
- "type": "object",
3515
- "properties": {}
3516
- }
3517
- ],
3518
- "description": "Event emitted when an error occurs during streaming",
3519
- "example": {
3520
- "type": "error",
3521
- "code": "rate_limit_exceeded",
3522
- "message": "Rate limit exceeded. Please try again later.",
3523
- "param": null,
3524
- "sequence_number": 2
3525
- }
3526
- },
3527
- "OutputItemAddedEvent": {
3528
- "type": "object",
3529
- "properties": {
3530
- "type": {
3531
- "type": "string",
3532
- "enum": [
3533
- "response.output_item.added"
3534
- ]
3535
- },
3536
- "output_index": {
3537
- "type": "integer"
3538
- },
3539
- "item": {
3540
- "oneOf": [
3541
- {
3542
- "$ref": "#/components/schemas/OutputMessage"
3543
- },
3544
- {
3545
- "$ref": "#/components/schemas/OutputItemReasoning"
3546
- },
3547
- {
3548
- "$ref": "#/components/schemas/OutputItemFunctionCall"
3549
- },
3550
- {
3551
- "$ref": "#/components/schemas/OutputItemWebSearchCall"
3552
- },
3553
- {
3554
- "$ref": "#/components/schemas/OutputItemFileSearchCall"
3555
- },
3556
- {
3557
- "$ref": "#/components/schemas/OutputItemImageGenerationCall"
3558
- }
3559
- ],
3560
- "discriminator": {
3561
- "propertyName": "type",
3562
- "mapping": {
3563
- "message": "#/components/schemas/OutputMessage",
3564
- "reasoning": "#/components/schemas/OutputItemReasoning",
3565
- "function_call": "#/components/schemas/OutputItemFunctionCall",
3566
- "web_search_call": "#/components/schemas/OutputItemWebSearchCall",
3567
- "file_search_call": "#/components/schemas/OutputItemFileSearchCall",
3568
- "image_generation_call": "#/components/schemas/OutputItemImageGenerationCall"
3569
- }
3570
- }
3571
- },
3572
- "sequence_number": {
3573
- "type": "integer"
3574
- }
3575
- },
3576
- "required": [
3577
- "type",
3578
- "output_index",
3579
- "item",
3580
- "sequence_number"
3581
- ],
3582
- "description": "Event emitted when a new output item is added to the response",
3583
- "example": {
3584
- "type": "response.output_item.added",
3585
- "output_index": 0,
3586
- "item": {
3587
- "id": "item-1",
3588
- "type": "message",
3589
- "status": "in_progress",
3590
- "role": "assistant",
3591
- "content": []
3592
- },
3593
- "sequence_number": 2
3594
- }
3595
- },
3596
- "OutputItemDoneEvent": {
3597
- "type": "object",
3598
- "properties": {
3599
- "type": {
3600
- "type": "string",
3601
- "enum": [
3602
- "response.output_item.done"
3603
- ]
3604
- },
3605
- "output_index": {
3606
- "type": "integer"
3607
- },
3608
- "item": {
3609
- "oneOf": [
3610
- {
3611
- "$ref": "#/components/schemas/OutputMessage"
3612
- },
3613
- {
3614
- "$ref": "#/components/schemas/OutputItemReasoning"
3615
- },
3616
- {
3617
- "$ref": "#/components/schemas/OutputItemFunctionCall"
3618
- },
3619
- {
3620
- "$ref": "#/components/schemas/OutputItemWebSearchCall"
3621
- },
3622
- {
3623
- "$ref": "#/components/schemas/OutputItemFileSearchCall"
3624
- },
3625
- {
3626
- "$ref": "#/components/schemas/OutputItemImageGenerationCall"
3627
- }
3628
- ],
3629
- "discriminator": {
3630
- "propertyName": "type",
3631
- "mapping": {
3632
- "message": "#/components/schemas/OutputMessage",
3633
- "reasoning": "#/components/schemas/OutputItemReasoning",
3634
- "function_call": "#/components/schemas/OutputItemFunctionCall",
3635
- "web_search_call": "#/components/schemas/OutputItemWebSearchCall",
3636
- "file_search_call": "#/components/schemas/OutputItemFileSearchCall",
3637
- "image_generation_call": "#/components/schemas/OutputItemImageGenerationCall"
3638
- }
3639
- }
3640
- },
3641
- "sequence_number": {
3642
- "type": "integer"
3643
- }
3644
- },
3645
- "required": [
3646
- "type",
3647
- "output_index",
3648
- "item",
3649
- "sequence_number"
3650
- ],
3651
- "description": "Event emitted when an output item is complete",
3652
- "example": {
3653
- "type": "response.output_item.done",
3654
- "output_index": 0,
3655
- "item": {
3656
- "id": "item-1",
3657
- "type": "message",
3658
- "status": "completed",
3659
- "role": "assistant",
3660
- "content": [
3661
- {
3662
- "type": "output_text",
3663
- "text": "Hello! How can I help you?",
3664
- "annotations": []
3665
- }
3666
- ]
3667
- },
3668
- "sequence_number": 8
3669
- }
3670
- },
3671
- "BaseContentPartAddedEvent": {
3672
- "type": "object",
3673
- "properties": {
3674
- "type": {
3675
- "type": "string",
3676
- "enum": [
3677
- "response.content_part.added"
3678
- ]
3679
- },
3680
- "output_index": {
3681
- "type": "integer"
3682
- },
3683
- "item_id": {
3684
- "type": "string"
3685
- },
3686
- "content_index": {
3687
- "type": "integer"
3688
- },
3689
- "part": {
3690
- "anyOf": [
3691
- {
3692
- "$ref": "#/components/schemas/ResponseOutputText"
3693
- },
3694
- {
3695
- "$ref": "#/components/schemas/OpenAIResponsesRefusalContent"
3696
- }
3697
- ]
3698
- },
3699
- "sequence_number": {
3700
- "type": "integer"
3701
- }
3702
- },
3703
- "required": [
3704
- "type",
3705
- "output_index",
3706
- "item_id",
3707
- "content_index",
3708
- "part",
3709
- "sequence_number"
3710
- ],
3711
- "description": "Event emitted when a new content part is added to an output item",
3712
- "example": {
3713
- "type": "response.content_part.added",
3714
- "output_index": 0,
3715
- "item_id": "item-1",
3716
- "content_index": 0,
3717
- "part": {
3718
- "type": "output_text",
3719
- "text": "",
3720
- "annotations": []
3721
- },
3722
- "sequence_number": 3
3723
- }
3724
- },
3725
- "ContentPartAddedEvent": {
3726
- "allOf": [
3727
- {
3728
- "$ref": "#/components/schemas/BaseContentPartAddedEvent"
3729
- },
3730
- {
3731
- "type": "object",
3732
- "properties": {
3733
- "part": {
3734
- "anyOf": [
3735
- {
3736
- "$ref": "#/components/schemas/ResponseOutputText"
3737
- },
3738
- {
3739
- "$ref": "#/components/schemas/ReasoningTextContent"
3740
- },
3741
- {
3742
- "$ref": "#/components/schemas/OpenAIResponsesRefusalContent"
3743
- }
3744
- ]
3745
- }
3746
- }
3747
- }
3748
- ],
3749
- "description": "Event emitted when a new content part is added to an output item",
3750
- "example": {
3751
- "type": "response.content_part.added",
3752
- "output_index": 0,
3753
- "item_id": "item-1",
3754
- "content_index": 0,
3755
- "part": {
3756
- "type": "output_text",
3757
- "text": "",
3758
- "annotations": []
3759
- },
3760
- "sequence_number": 3
3761
- }
3762
- },
3763
- "BaseContentPartDoneEvent": {
3764
- "type": "object",
3765
- "properties": {
3766
- "type": {
3767
- "type": "string",
3768
- "enum": [
3769
- "response.content_part.done"
3770
- ]
3771
- },
3772
- "output_index": {
3773
- "type": "integer"
3774
- },
3775
- "item_id": {
3776
- "type": "string"
3777
- },
3778
- "content_index": {
3779
- "type": "integer"
3780
- },
3781
- "part": {
3782
- "anyOf": [
3783
- {
3784
- "$ref": "#/components/schemas/ResponseOutputText"
3785
- },
3786
- {
3787
- "$ref": "#/components/schemas/OpenAIResponsesRefusalContent"
3788
- }
3789
- ]
3790
- },
3791
- "sequence_number": {
3792
- "type": "integer"
3793
- }
3794
- },
3795
- "required": [
3796
- "type",
3797
- "output_index",
3798
- "item_id",
3799
- "content_index",
3800
- "part",
3801
- "sequence_number"
3802
- ],
3803
- "description": "Event emitted when a content part is complete",
3804
- "example": {
3805
- "type": "response.content_part.done",
3806
- "output_index": 0,
3807
- "item_id": "item-1",
3808
- "content_index": 0,
3809
- "part": {
3810
- "type": "output_text",
3811
- "text": "Hello! How can I help you?",
3812
- "annotations": []
3813
- },
3814
- "sequence_number": 7
3815
- }
3816
- },
3817
- "ContentPartDoneEvent": {
3818
- "allOf": [
3819
- {
3820
- "$ref": "#/components/schemas/BaseContentPartDoneEvent"
3821
- },
3822
- {
3823
- "type": "object",
3824
- "properties": {
3825
- "part": {
3826
- "anyOf": [
3827
- {
3828
- "$ref": "#/components/schemas/ResponseOutputText"
3829
- },
3830
- {
3831
- "$ref": "#/components/schemas/ReasoningTextContent"
3832
- },
3833
- {
3834
- "$ref": "#/components/schemas/OpenAIResponsesRefusalContent"
3835
- }
3836
- ]
3837
- }
3838
- }
3839
- }
3840
- ],
3841
- "description": "Event emitted when a content part is complete",
3842
- "example": {
3843
- "type": "response.content_part.done",
3844
- "output_index": 0,
3845
- "item_id": "item-1",
3846
- "content_index": 0,
3847
- "part": {
3848
- "type": "output_text",
3849
- "text": "Hello! How can I help you?",
3850
- "annotations": []
3851
- },
3852
- "sequence_number": 7
3853
- }
3854
- },
3855
- "OpenResponsesTopLogprobs": {
3856
- "type": "object",
3857
- "properties": {
3858
- "token": {
3859
- "type": "string"
3860
- },
3861
- "logprob": {
3862
- "type": "number"
3863
- },
3864
- "bytes": {
3865
- "type": "array",
3866
- "items": {
3867
- "type": "number"
3868
- }
3869
- }
3870
- },
3871
- "description": "Alternative token with its log probability",
3872
- "example": {
3873
- "token": "hello",
3874
- "logprob": -0.5
3875
- }
3876
- },
3877
- "OpenResponsesLogProbs": {
3878
- "type": "object",
3879
- "properties": {
3880
- "logprob": {
3881
- "type": "number"
3882
- },
3883
- "token": {
3884
- "type": "string"
3885
- },
3886
- "top_logprobs": {
3887
- "type": "array",
3888
- "items": {
3889
- "$ref": "#/components/schemas/OpenResponsesTopLogprobs"
3890
- }
3891
- },
3892
- "bytes": {
3893
- "type": "array",
3894
- "items": {
3895
- "type": "number"
3896
- }
3897
- }
3898
- },
3899
- "required": [
3900
- "logprob",
3901
- "token"
3902
- ],
3903
- "description": "Log probability information for a token",
3904
- "example": {
3905
- "logprob": -0.1,
3906
- "token": "world",
3907
- "top_logprobs": [
3908
- {
3909
- "token": "hello",
3910
- "logprob": -0.5
3911
- }
3912
- ]
3913
- }
3914
- },
3915
- "BaseTextDeltaEvent": {
3916
- "type": "object",
3917
- "properties": {
3918
- "type": {
3919
- "type": "string",
3920
- "enum": [
3921
- "response.output_text.delta"
3922
- ]
3923
- },
3924
- "logprobs": {
3925
- "type": "array",
3926
- "items": {
3927
- "$ref": "#/components/schemas/OpenResponsesLogProbs"
3928
- }
3929
- },
3930
- "output_index": {
3931
- "type": "integer"
3932
- },
3933
- "item_id": {
3934
- "type": "string"
3935
- },
3936
- "content_index": {
3937
- "type": "integer"
3938
- },
3939
- "delta": {
3940
- "type": "string"
3941
- },
3942
- "sequence_number": {
3943
- "type": "integer"
3944
- }
3945
- },
3946
- "required": [
3947
- "type",
3948
- "logprobs",
3949
- "output_index",
3950
- "item_id",
3951
- "content_index",
3952
- "delta",
3953
- "sequence_number"
3954
- ],
3955
- "description": "Event emitted when a text delta is streamed",
3956
- "example": {
3957
- "type": "response.output_text.delta",
3958
- "logprobs": [],
3959
- "output_index": 0,
3960
- "item_id": "item-1",
3961
- "content_index": 0,
3962
- "delta": "Hello",
3963
- "sequence_number": 4
3964
- }
3965
- },
3966
- "TextDeltaEvent": {
3967
- "allOf": [
3968
- {
3969
- "$ref": "#/components/schemas/BaseTextDeltaEvent"
3970
- },
3971
- {
3972
- "type": "object",
3973
- "properties": {
3974
- "logprobs": {
3975
- "type": "array",
3976
- "items": {
3977
- "allOf": [
3978
- {
3979
- "$ref": "#/components/schemas/OpenResponsesLogProbs"
3980
- },
3981
- {
3982
- "type": "object",
3983
- "properties": {
3984
- "top_logprobs": {
3985
- "type": "array",
3986
- "items": {
3987
- "allOf": [
3988
- {
3989
- "$ref": "#/components/schemas/OpenResponsesTopLogprobs"
3990
- },
3991
- {
3992
- "type": "object",
3993
- "properties": {
3994
- "bytes": {
3995
- "type": "array",
3996
- "items": {
3997
- "type": "integer"
3998
- }
3999
- }
4000
- }
4001
- }
4002
- ],
4003
- "description": "Alternative token with its log probability",
4004
- "example": {
4005
- "token": "hello",
4006
- "logprob": -0.5
4007
- }
4008
- }
4009
- },
4010
- "bytes": {
4011
- "type": "array",
4012
- "items": {
4013
- "type": "integer"
4014
- }
4015
- }
4016
- }
4017
- }
4018
- ],
4019
- "description": "Log probability information for a token",
4020
- "example": {
4021
- "logprob": -0.1,
4022
- "token": "world",
4023
- "top_logprobs": [
4024
- {
4025
- "token": "hello",
4026
- "logprob": -0.5
4027
- }
4028
- ]
4029
- }
4030
- }
4031
- }
4032
- }
4033
- }
4034
- ],
4035
- "description": "Event emitted when a text delta is streamed",
4036
- "example": {
4037
- "type": "response.output_text.delta",
4038
- "logprobs": [],
4039
- "output_index": 0,
4040
- "item_id": "item-1",
4041
- "content_index": 0,
4042
- "delta": "Hello",
4043
- "sequence_number": 4
4044
- }
4045
- },
4046
- "BaseTextDoneEvent": {
4047
- "type": "object",
4048
- "properties": {
4049
- "type": {
4050
- "type": "string",
4051
- "enum": [
4052
- "response.output_text.done"
4053
- ]
4054
- },
4055
- "output_index": {
4056
- "type": "integer"
4057
- },
4058
- "item_id": {
4059
- "type": "string"
4060
- },
4061
- "content_index": {
4062
- "type": "integer"
4063
- },
4064
- "text": {
4065
- "type": "string"
4066
- },
4067
- "sequence_number": {
4068
- "type": "integer"
4069
- },
4070
- "logprobs": {
4071
- "type": "array",
4072
- "items": {
4073
- "$ref": "#/components/schemas/OpenResponsesLogProbs"
4074
- }
4075
- }
4076
- },
4077
- "required": [
4078
- "type",
4079
- "output_index",
4080
- "item_id",
4081
- "content_index",
4082
- "text",
4083
- "sequence_number",
4084
- "logprobs"
4085
- ],
4086
- "description": "Event emitted when text streaming is complete",
4087
- "example": {
4088
- "type": "response.output_text.done",
4089
- "output_index": 0,
4090
- "item_id": "item-1",
4091
- "content_index": 0,
4092
- "text": "Hello! How can I help you?",
4093
- "sequence_number": 6,
4094
- "logprobs": []
4095
- }
4096
- },
4097
- "TextDoneEvent": {
4098
- "allOf": [
4099
- {
4100
- "$ref": "#/components/schemas/BaseTextDoneEvent"
4101
- },
4102
- {
4103
- "type": "object",
4104
- "properties": {
4105
- "logprobs": {
4106
- "type": "array",
4107
- "items": {
4108
- "allOf": [
4109
- {
4110
- "$ref": "#/components/schemas/OpenResponsesLogProbs"
4111
- },
4112
- {
4113
- "type": "object",
4114
- "properties": {
4115
- "top_logprobs": {
4116
- "type": "array",
4117
- "items": {
4118
- "allOf": [
4119
- {
4120
- "$ref": "#/components/schemas/OpenResponsesTopLogprobs"
4121
- },
4122
- {
4123
- "type": "object",
4124
- "properties": {
4125
- "bytes": {
4126
- "type": "array",
4127
- "items": {
4128
- "type": "integer"
4129
- }
4130
- }
4131
- }
4132
- }
4133
- ],
4134
- "description": "Alternative token with its log probability",
4135
- "example": {
4136
- "token": "hello",
4137
- "logprob": -0.5
4138
- }
4139
- }
4140
- },
4141
- "bytes": {
4142
- "type": "array",
4143
- "items": {
4144
- "type": "integer"
4145
- }
4146
- }
4147
- }
4148
- }
4149
- ],
4150
- "description": "Log probability information for a token",
4151
- "example": {
4152
- "logprob": -0.1,
4153
- "token": "world",
4154
- "top_logprobs": [
4155
- {
4156
- "token": "hello",
4157
- "logprob": -0.5
4158
- }
4159
- ]
4160
- }
4161
- }
4162
- }
4163
- }
4164
- }
4165
- ],
4166
- "description": "Event emitted when text streaming is complete",
4167
- "example": {
4168
- "type": "response.output_text.done",
4169
- "output_index": 0,
4170
- "item_id": "item-1",
4171
- "content_index": 0,
4172
- "text": "Hello! How can I help you?",
4173
- "sequence_number": 6,
4174
- "logprobs": []
4175
- }
4176
- },
4177
- "BaseRefusalDeltaEvent": {
4178
- "type": "object",
4179
- "properties": {
4180
- "type": {
4181
- "type": "string",
4182
- "enum": [
4183
- "response.refusal.delta"
4184
- ]
4185
- },
4186
- "output_index": {
4187
- "type": "integer"
4188
- },
4189
- "item_id": {
4190
- "type": "string"
4191
- },
4192
- "content_index": {
4193
- "type": "integer"
4194
- },
4195
- "delta": {
4196
- "type": "string"
4197
- },
4198
- "sequence_number": {
4199
- "type": "integer"
4200
- }
4201
- },
4202
- "required": [
4203
- "type",
4204
- "output_index",
4205
- "item_id",
4206
- "content_index",
4207
- "delta",
4208
- "sequence_number"
4209
- ],
4210
- "description": "Event emitted when a refusal delta is streamed",
4211
- "example": {
4212
- "type": "response.refusal.delta",
4213
- "output_index": 0,
4214
- "item_id": "item-1",
4215
- "content_index": 0,
4216
- "delta": "I'm sorry",
4217
- "sequence_number": 4
4218
- }
4219
- },
4220
- "RefusalDeltaEvent": {
4221
- "allOf": [
4222
- {
4223
- "$ref": "#/components/schemas/BaseRefusalDeltaEvent"
4224
- },
4225
- {
4226
- "type": "object",
4227
- "properties": {}
4228
- }
4229
- ],
4230
- "description": "Event emitted when a refusal delta is streamed",
4231
- "example": {
4232
- "type": "response.refusal.delta",
4233
- "output_index": 0,
4234
- "item_id": "item-1",
4235
- "content_index": 0,
4236
- "delta": "I'm sorry",
4237
- "sequence_number": 4
4238
- }
4239
- },
4240
- "BaseRefusalDoneEvent": {
4241
- "type": "object",
4242
- "properties": {
4243
- "type": {
4244
- "type": "string",
4245
- "enum": [
4246
- "response.refusal.done"
4247
- ]
4248
- },
4249
- "output_index": {
4250
- "type": "integer"
4251
- },
4252
- "item_id": {
4253
- "type": "string"
4254
- },
4255
- "content_index": {
4256
- "type": "integer"
4257
- },
4258
- "refusal": {
4259
- "type": "string"
4260
- },
4261
- "sequence_number": {
4262
- "type": "integer"
4263
- }
4264
- },
4265
- "required": [
4266
- "type",
4267
- "output_index",
4268
- "item_id",
4269
- "content_index",
4270
- "refusal",
4271
- "sequence_number"
4272
- ],
4273
- "description": "Event emitted when refusal streaming is complete",
4274
- "example": {
4275
- "type": "response.refusal.done",
4276
- "output_index": 0,
4277
- "item_id": "item-1",
4278
- "content_index": 0,
4279
- "refusal": "I'm sorry, but I can't assist with that request.",
4280
- "sequence_number": 6
4281
- }
4282
- },
4283
- "RefusalDoneEvent": {
4284
- "allOf": [
4285
- {
4286
- "$ref": "#/components/schemas/BaseRefusalDoneEvent"
4287
- },
4288
- {
4289
- "type": "object",
4290
- "properties": {}
4291
- }
4292
- ],
4293
- "description": "Event emitted when refusal streaming is complete",
4294
- "example": {
4295
- "type": "response.refusal.done",
4296
- "output_index": 0,
4297
- "item_id": "item-1",
4298
- "content_index": 0,
4299
- "refusal": "I'm sorry, but I can't assist with that request.",
4300
- "sequence_number": 6
4301
- }
4302
- },
4303
- "BaseAnnotationAddedEvent": {
4304
- "type": "object",
4305
- "properties": {
4306
- "type": {
4307
- "type": "string",
4308
- "enum": [
4309
- "response.output_text.annotation.added"
4310
- ]
4311
- },
4312
- "output_index": {
4313
- "type": "integer"
4314
- },
4315
- "item_id": {
4316
- "type": "string"
4317
- },
4318
- "content_index": {
4319
- "type": "integer"
4320
- },
4321
- "sequence_number": {
4322
- "type": "integer"
4323
- },
4324
- "annotation_index": {
4325
- "type": "integer"
4326
- },
4327
- "annotation": {
4328
- "$ref": "#/components/schemas/OpenAIResponsesAnnotation"
4329
- }
4330
- },
4331
- "required": [
4332
- "type",
4333
- "output_index",
4334
- "item_id",
4335
- "content_index",
4336
- "sequence_number",
4337
- "annotation_index",
4338
- "annotation"
4339
- ],
4340
- "description": "Event emitted when a text annotation is added to output",
4341
- "example": {
4342
- "type": "response.output_text.annotation.added",
4343
- "output_index": 0,
4344
- "item_id": "item-1",
4345
- "content_index": 0,
4346
- "sequence_number": 5,
4347
- "annotation_index": 0,
4348
- "annotation": {
4349
- "type": "url_citation",
4350
- "url": "https://example.com",
4351
- "title": "Example",
4352
- "start_index": 0,
4353
- "end_index": 7
4354
- }
4355
- }
4356
- },
4357
- "AnnotationAddedEvent": {
4358
- "allOf": [
4359
- {
4360
- "$ref": "#/components/schemas/BaseAnnotationAddedEvent"
4361
- },
4362
- {
4363
- "type": "object",
4364
- "properties": {}
4365
- }
4366
- ],
4367
- "description": "Event emitted when a text annotation is added to output",
4368
- "example": {
4369
- "type": "response.output_text.annotation.added",
4370
- "output_index": 0,
4371
- "item_id": "item-1",
4372
- "content_index": 0,
4373
- "sequence_number": 5,
4374
- "annotation_index": 0,
4375
- "annotation": {
4376
- "type": "url_citation",
4377
- "url": "https://example.com",
4378
- "title": "Example",
4379
- "start_index": 0,
4380
- "end_index": 7
4381
- }
4382
- }
4383
- },
4384
- "BaseFunctionCallArgsDeltaEvent": {
4385
- "type": "object",
4386
- "properties": {
4387
- "type": {
4388
- "type": "string",
4389
- "enum": [
4390
- "response.function_call_arguments.delta"
4391
- ]
4392
- },
4393
- "item_id": {
4394
- "type": "string"
4395
- },
4396
- "output_index": {
4397
- "type": "integer"
4398
- },
4399
- "delta": {
4400
- "type": "string"
4401
- },
4402
- "sequence_number": {
4403
- "type": "integer"
4404
- }
4405
- },
4406
- "required": [
4407
- "type",
4408
- "item_id",
4409
- "output_index",
4410
- "delta",
4411
- "sequence_number"
4412
- ],
4413
- "description": "Event emitted when function call arguments are being streamed",
4414
- "example": {
4415
- "type": "response.function_call_arguments.delta",
4416
- "item_id": "item-1",
4417
- "output_index": 0,
4418
- "delta": "{\"city\": \"San",
4419
- "sequence_number": 4
4420
- }
4421
- },
4422
- "FunctionCallArgsDeltaEvent": {
4423
- "allOf": [
4424
- {
4425
- "$ref": "#/components/schemas/BaseFunctionCallArgsDeltaEvent"
4426
- },
4427
- {
4428
- "type": "object",
4429
- "properties": {}
4430
- }
4431
- ],
4432
- "description": "Event emitted when function call arguments are being streamed",
4433
- "example": {
4434
- "type": "response.function_call_arguments.delta",
4435
- "item_id": "item-1",
4436
- "output_index": 0,
4437
- "delta": "{\"city\": \"San",
4438
- "sequence_number": 4
4439
- }
4440
- },
4441
- "BaseFunctionCallArgsDoneEvent": {
4442
- "type": "object",
4443
- "properties": {
4444
- "type": {
4445
- "type": "string",
4446
- "enum": [
4447
- "response.function_call_arguments.done"
4448
- ]
4449
- },
4450
- "item_id": {
4451
- "type": "string"
4452
- },
4453
- "output_index": {
4454
- "type": "integer"
4455
- },
4456
- "name": {
4457
- "type": "string"
4458
- },
4459
- "arguments": {
4460
- "type": "string"
4461
- },
4462
- "sequence_number": {
4463
- "type": "integer"
4464
- }
4465
- },
4466
- "required": [
4467
- "type",
4468
- "item_id",
4469
- "output_index",
4470
- "name",
4471
- "arguments",
4472
- "sequence_number"
4473
- ],
4474
- "description": "Event emitted when function call arguments streaming is complete",
4475
- "example": {
4476
- "type": "response.function_call_arguments.done",
4477
- "item_id": "item-1",
4478
- "output_index": 0,
4479
- "name": "get_weather",
4480
- "arguments": "{\"city\": \"San Francisco\", \"units\": \"celsius\"}",
4481
- "sequence_number": 6
4482
- }
4483
- },
4484
- "FunctionCallArgsDoneEvent": {
4485
- "allOf": [
4486
- {
4487
- "$ref": "#/components/schemas/BaseFunctionCallArgsDoneEvent"
4488
- },
4489
- {
4490
- "type": "object",
4491
- "properties": {}
4492
- }
4493
- ],
4494
- "description": "Event emitted when function call arguments streaming is complete",
4495
- "example": {
4496
- "type": "response.function_call_arguments.done",
4497
- "item_id": "item-1",
4498
- "output_index": 0,
4499
- "name": "get_weather",
4500
- "arguments": "{\"city\": \"San Francisco\", \"units\": \"celsius\"}",
4501
- "sequence_number": 6
4502
- }
4503
- },
4504
- "BaseReasoningDeltaEvent": {
4505
- "type": "object",
4506
- "properties": {
4507
- "type": {
4508
- "type": "string",
4509
- "enum": [
4510
- "response.reasoning_text.delta"
4511
- ]
4512
- },
4513
- "output_index": {
4514
- "type": "integer"
4515
- },
4516
- "item_id": {
4517
- "type": "string"
4518
- },
4519
- "content_index": {
4520
- "type": "integer"
4521
- },
4522
- "delta": {
4523
- "type": "string"
4524
- },
4525
- "sequence_number": {
4526
- "type": "integer"
4527
- }
4528
- },
4529
- "required": [
4530
- "type",
4531
- "output_index",
4532
- "item_id",
4533
- "content_index",
4534
- "delta",
4535
- "sequence_number"
4536
- ],
4537
- "description": "Event emitted when reasoning text delta is streamed",
4538
- "example": {
4539
- "type": "response.reasoning_text.delta",
4540
- "output_index": 0,
4541
- "item_id": "item-1",
4542
- "content_index": 0,
4543
- "delta": "First, we need",
4544
- "sequence_number": 4
4545
- }
4546
- },
4547
- "ReasoningDeltaEvent": {
4548
- "allOf": [
4549
- {
4550
- "$ref": "#/components/schemas/BaseReasoningDeltaEvent"
4551
- },
4552
- {
4553
- "type": "object",
4554
- "properties": {}
4555
- }
4556
- ],
4557
- "description": "Event emitted when reasoning text delta is streamed",
4558
- "example": {
4559
- "type": "response.reasoning_text.delta",
4560
- "output_index": 0,
4561
- "item_id": "item-1",
4562
- "content_index": 0,
4563
- "delta": "First, we need",
4564
- "sequence_number": 4
4565
- }
4566
- },
4567
- "BaseReasoningDoneEvent": {
4568
- "type": "object",
4569
- "properties": {
4570
- "type": {
4571
- "type": "string",
4572
- "enum": [
4573
- "response.reasoning_text.done"
4574
- ]
4575
- },
4576
- "output_index": {
4577
- "type": "integer"
4578
- },
4579
- "item_id": {
4580
- "type": "string"
4581
- },
4582
- "content_index": {
4583
- "type": "integer"
4584
- },
4585
- "text": {
4586
- "type": "string"
4587
- },
4588
- "sequence_number": {
4589
- "type": "integer"
4590
- }
4591
- },
4592
- "required": [
4593
- "type",
4594
- "output_index",
4595
- "item_id",
4596
- "content_index",
4597
- "text",
4598
- "sequence_number"
4599
- ],
4600
- "description": "Event emitted when reasoning text streaming is complete",
4601
- "example": {
4602
- "type": "response.reasoning_text.done",
4603
- "output_index": 0,
4604
- "item_id": "item-1",
4605
- "content_index": 0,
4606
- "text": "First, we need to identify the key components and then combine them logically.",
4607
- "sequence_number": 6
4608
- }
4609
- },
4610
- "ReasoningDoneEvent": {
4611
- "allOf": [
4612
- {
4613
- "$ref": "#/components/schemas/BaseReasoningDoneEvent"
4614
- },
4615
- {
4616
- "type": "object",
4617
- "properties": {}
4618
- }
4619
- ],
4620
- "description": "Event emitted when reasoning text streaming is complete",
4621
- "example": {
4622
- "type": "response.reasoning_text.done",
4623
- "output_index": 0,
4624
- "item_id": "item-1",
4625
- "content_index": 0,
4626
- "text": "First, we need to identify the key components and then combine them logically.",
4627
- "sequence_number": 6
4628
- }
4629
- },
4630
- "BaseReasoningSummaryPartAddedEvent": {
4631
- "type": "object",
4632
- "properties": {
4633
- "type": {
4634
- "type": "string",
4635
- "enum": [
4636
- "response.reasoning_summary_part.added"
4637
- ]
4638
- },
4639
- "output_index": {
4640
- "type": "integer"
4641
- },
4642
- "item_id": {
4643
- "type": "string"
4644
- },
4645
- "summary_index": {
4646
- "type": "integer"
4647
- },
4648
- "part": {
4649
- "$ref": "#/components/schemas/ReasoningSummaryText"
4650
- },
4651
- "sequence_number": {
4652
- "type": "integer"
4653
- }
4654
- },
4655
- "required": [
4656
- "type",
4657
- "output_index",
4658
- "item_id",
4659
- "summary_index",
4660
- "part",
4661
- "sequence_number"
4662
- ],
4663
- "description": "Event emitted when a reasoning summary part is added",
4664
- "example": {
4665
- "type": "response.reasoning_summary_part.added",
4666
- "output_index": 0,
4667
- "item_id": "item-1",
4668
- "summary_index": 0,
4669
- "part": {
4670
- "type": "summary_text",
4671
- "text": ""
4672
- },
4673
- "sequence_number": 3
4674
- }
4675
- },
4676
- "ReasoningSummaryPartAddedEvent": {
4677
- "allOf": [
4678
- {
4679
- "$ref": "#/components/schemas/BaseReasoningSummaryPartAddedEvent"
4680
- },
4681
- {
4682
- "type": "object",
4683
- "properties": {}
4684
- }
4685
- ],
4686
- "description": "Event emitted when a reasoning summary part is added",
4687
- "example": {
4688
- "type": "response.reasoning_summary_part.added",
4689
- "output_index": 0,
4690
- "item_id": "item-1",
4691
- "summary_index": 0,
4692
- "part": {
4693
- "type": "summary_text",
4694
- "text": ""
4695
- },
4696
- "sequence_number": 3
4697
- }
4698
- },
4699
- "BaseReasoningSummaryPartDoneEvent": {
4700
- "type": "object",
4701
- "properties": {
4702
- "type": {
4703
- "type": "string",
4704
- "enum": [
4705
- "response.reasoning_summary_part.done"
4706
- ]
4707
- },
4708
- "output_index": {
4709
- "type": "integer"
4710
- },
4711
- "item_id": {
4712
- "type": "string"
4713
- },
4714
- "summary_index": {
4715
- "type": "integer"
4716
- },
4717
- "part": {
4718
- "$ref": "#/components/schemas/ReasoningSummaryText"
4719
- },
4720
- "sequence_number": {
4721
- "type": "integer"
4722
- }
4723
- },
4724
- "required": [
4725
- "type",
4726
- "output_index",
4727
- "item_id",
4728
- "summary_index",
4729
- "part",
4730
- "sequence_number"
4731
- ],
4732
- "description": "Event emitted when a reasoning summary part is complete",
4733
- "example": {
4734
- "type": "response.reasoning_summary_part.done",
4735
- "output_index": 0,
4736
- "item_id": "item-1",
4737
- "summary_index": 0,
4738
- "part": {
4739
- "type": "summary_text",
4740
- "text": "Analyzing the problem step by step to find the optimal solution."
4741
- },
4742
- "sequence_number": 7
4743
- }
4744
- },
4745
- "ReasoningSummaryPartDoneEvent": {
4746
- "allOf": [
4747
- {
4748
- "$ref": "#/components/schemas/BaseReasoningSummaryPartDoneEvent"
4749
- },
4750
- {
4751
- "type": "object",
4752
- "properties": {}
4753
- }
4754
- ],
4755
- "description": "Event emitted when a reasoning summary part is complete",
4756
- "example": {
4757
- "type": "response.reasoning_summary_part.done",
4758
- "output_index": 0,
4759
- "item_id": "item-1",
4760
- "summary_index": 0,
4761
- "part": {
4762
- "type": "summary_text",
4763
- "text": "Analyzing the problem step by step to find the optimal solution."
4764
- },
4765
- "sequence_number": 7
4766
- }
4767
- },
4768
- "BaseReasoningSummaryTextDeltaEvent": {
4769
- "type": "object",
4770
- "properties": {
4771
- "type": {
4772
- "type": "string",
4773
- "enum": [
4774
- "response.reasoning_summary_text.delta"
4775
- ]
4776
- },
4777
- "item_id": {
4778
- "type": "string"
4779
- },
4780
- "output_index": {
4781
- "type": "integer"
4782
- },
4783
- "summary_index": {
4784
- "type": "integer"
4785
- },
4786
- "delta": {
4787
- "type": "string"
4788
- },
4789
- "sequence_number": {
4790
- "type": "integer"
4791
- }
4792
- },
4793
- "required": [
4794
- "type",
4795
- "item_id",
4796
- "output_index",
4797
- "summary_index",
4798
- "delta",
4799
- "sequence_number"
4800
- ],
4801
- "description": "Event emitted when reasoning summary text delta is streamed",
4802
- "example": {
4803
- "type": "response.reasoning_summary_text.delta",
4804
- "item_id": "item-1",
4805
- "output_index": 0,
4806
- "summary_index": 0,
4807
- "delta": "Analyzing",
4808
- "sequence_number": 4
4809
- }
4810
- },
4811
- "ReasoningSummaryTextDeltaEvent": {
4812
- "allOf": [
4813
- {
4814
- "$ref": "#/components/schemas/BaseReasoningSummaryTextDeltaEvent"
4815
- },
4816
- {
4817
- "type": "object",
4818
- "properties": {}
4819
- }
4820
- ],
4821
- "description": "Event emitted when reasoning summary text delta is streamed",
4822
- "example": {
4823
- "type": "response.reasoning_summary_text.delta",
4824
- "item_id": "item-1",
4825
- "output_index": 0,
4826
- "summary_index": 0,
4827
- "delta": "Analyzing",
4828
- "sequence_number": 4
4829
- }
4830
- },
4831
- "BaseReasoningSummaryTextDoneEvent": {
4832
- "type": "object",
4833
- "properties": {
4834
- "type": {
4835
- "type": "string",
4836
- "enum": [
4837
- "response.reasoning_summary_text.done"
4838
- ]
4839
- },
4840
- "item_id": {
4841
- "type": "string"
4842
- },
4843
- "output_index": {
4844
- "type": "integer"
4845
- },
4846
- "summary_index": {
4847
- "type": "integer"
4848
- },
4849
- "text": {
4850
- "type": "string"
4851
- },
4852
- "sequence_number": {
4853
- "type": "integer"
4854
- }
4855
- },
4856
- "required": [
4857
- "type",
4858
- "item_id",
4859
- "output_index",
4860
- "summary_index",
4861
- "text",
4862
- "sequence_number"
4863
- ],
4864
- "description": "Event emitted when reasoning summary text streaming is complete",
4865
- "example": {
4866
- "type": "response.reasoning_summary_text.done",
4867
- "item_id": "item-1",
4868
- "output_index": 0,
4869
- "summary_index": 0,
4870
- "text": "Analyzing the problem step by step to find the optimal solution.",
4871
- "sequence_number": 6
4872
- }
4873
- },
4874
- "ReasoningSummaryTextDoneEvent": {
4875
- "allOf": [
4876
- {
4877
- "$ref": "#/components/schemas/BaseReasoningSummaryTextDoneEvent"
4878
- },
4879
- {
4880
- "type": "object",
4881
- "properties": {}
4882
- }
4883
- ],
4884
- "description": "Event emitted when reasoning summary text streaming is complete",
4885
- "example": {
4886
- "type": "response.reasoning_summary_text.done",
4887
- "item_id": "item-1",
4888
- "output_index": 0,
4889
- "summary_index": 0,
4890
- "text": "Analyzing the problem step by step to find the optimal solution.",
4891
- "sequence_number": 6
4892
- }
4893
- },
4894
- "OpenAIResponsesImageGenCallInProgress": {
4895
- "type": "object",
4896
- "properties": {
4897
- "type": {
4898
- "type": "string",
4899
- "enum": [
4900
- "response.image_generation_call.in_progress"
4901
- ]
4902
- },
4903
- "item_id": {
4904
- "type": "string"
4905
- },
4906
- "output_index": {
4907
- "type": "number"
4908
- },
4909
- "sequence_number": {
4910
- "type": "number"
4911
- }
4912
- },
4913
- "required": [
4914
- "type",
4915
- "item_id",
4916
- "output_index",
4917
- "sequence_number"
4918
- ]
4919
- },
4920
- "ImageGenCallInProgressEvent": {
4921
- "allOf": [
4922
- {
4923
- "$ref": "#/components/schemas/OpenAIResponsesImageGenCallInProgress"
4924
- },
4925
- {
4926
- "type": "object",
4927
- "properties": {}
4928
- }
4929
- ],
4930
- "description": "Image generation call in progress",
4931
- "example": {
4932
- "type": "response.image_generation_call.in_progress",
4933
- "output_index": 0,
4934
- "sequence_number": 1,
4935
- "item_id": "call-123"
4936
- }
4937
- },
4938
- "OpenAIResponsesImageGenCallGenerating": {
4939
- "type": "object",
4940
- "properties": {
4941
- "type": {
4942
- "type": "string",
4943
- "enum": [
4944
- "response.image_generation_call.generating"
4945
- ]
4946
- },
4947
- "item_id": {
4948
- "type": "string"
4949
- },
4950
- "output_index": {
4951
- "type": "number"
4952
- },
4953
- "sequence_number": {
4954
- "type": "number"
4955
- }
4956
- },
4957
- "required": [
4958
- "type",
4959
- "item_id",
4960
- "output_index",
4961
- "sequence_number"
4962
- ]
4963
- },
4964
- "ImageGenCallGeneratingEvent": {
4965
- "allOf": [
4966
- {
4967
- "$ref": "#/components/schemas/OpenAIResponsesImageGenCallGenerating"
4968
- },
4969
- {
4970
- "type": "object",
4971
- "properties": {}
4972
- }
4973
- ],
4974
- "description": "Image generation call is generating",
4975
- "example": {
4976
- "type": "response.image_generation_call.generating",
4977
- "output_index": 0,
4978
- "sequence_number": 2,
4979
- "item_id": "call-123"
4980
- }
4981
- },
4982
- "OpenAIResponsesImageGenCallPartialImage": {
4983
- "type": "object",
4984
- "properties": {
4985
- "type": {
4986
- "type": "string",
4987
- "enum": [
4988
- "response.image_generation_call.partial_image"
4989
- ]
4990
- },
4991
- "item_id": {
4992
- "type": "string"
4993
- },
4994
- "output_index": {
4995
- "type": "number"
4996
- },
4997
- "sequence_number": {
4998
- "type": "number"
4999
- },
This file is too large to show in full.
lib/app.dart
+6
-5
@@ -13,6 +13,7 @@ import 'package:localmind/features/servers/views/add_server_screen.dart';
13
import 'package:localmind/features/personas/views/persona_list_screen.dart';
14
import 'package:localmind/features/personas/views/create_persona_screen.dart';
15
import 'package:localmind/features/settings/screens/settings_screen.dart';
16
+import 'package:localmind/features/conversations/views/chat_history_screen.dart';
17
import 'package:localmind/features/onboarding/screens/onboarding_server_type_screen.dart';
18
import 'package:localmind/features/onboarding/screens/onboarding_server_setup_screen.dart';
19
import 'package:localmind/features/onboarding/screens/onboarding_theme_screen.dart';
@@ -72,11 +73,6 @@ final routerProvider = Provider<GoRouter>((ref) {
73
return AppShell(child: child);
74
},
75
routes: [
75
- GoRoute(
76
- path: AppRoutes.home,
77
- pageBuilder: (context, state) =>
78
- const NoTransitionPage(child: ChatScreen()),
79
- ),
76
GoRoute(
77
path: AppRoutes.home,
78
pageBuilder: (context, state) =>
@@ -113,6 +109,11 @@ final routerProvider = Provider<GoRouter>((ref) {
109
pageBuilder: (context, state) =>
110
const NoTransitionPage(child: SettingsScreen()),
111
),
112
+ GoRoute(
113
+ path: AppRoutes.chatHistory,
114
+ pageBuilder: (context, state) =>
115
+ const NoTransitionPage(child: ChatHistoryScreen()),
116
+ ),
117
],
118
),
119
],
lib/core/routes/app_routes.dart
+1
@@ -9,5 +9,6 @@ class AppRoutes {
9
static const String createPersona = '/personas/create';
10
static const String settings = '/settings';
11
static const String models = '/models';
12
+ static const String chatHistory = '/history';
13
}
14
lib/features/conversations/views/chat_history_screen.dart
new
+74
@@ -0,0 +1,74 @@
1
+import 'package:flutter/material.dart';
2
+import 'package:flutter_riverpod/flutter_riverpod.dart';
3
+import 'package:localmind/features/conversations/providers/conversation_providers.dart';
4
+import 'components/conversation_list.dart';
5
+import 'components/conversation_empty_state.dart';
6
+import 'components/conversation_search_bar.dart';
7
+
8
+class ChatHistoryScreen extends ConsumerWidget {
9
+ const ChatHistoryScreen({super.key});
10
+
11
+ @override
12
+ Widget build(BuildContext context, WidgetRef ref) {
13
+ final theme = Theme.of(context);
14
+ final isDark = theme.brightness == Brightness.dark;
15
+
16
+ final groupedConversations = ref.watch(groupedConversationsProvider);
17
+ final activeConversation = ref.watch(activeConversationProvider);
18
+ final searchQuery = ref.watch(conversationSearchProvider);
19
+
20
+ return SafeArea(
21
+ child: Column(
22
+ children: [
23
+ // Header
24
+ Container(
25
+ padding: const EdgeInsets.only(left: 16, right: 16, bottom: 12),
26
+ decoration: BoxDecoration(
27
+ color: isDark ? const Color(0xFF0A0A0A) : const Color(0xFFFAFAFA),
28
+ border: Border(
29
+ bottom: BorderSide(
30
+ color: isDark
31
+ ? const Color(0xFF2A2A2A)
32
+ : const Color(0xFFE5E5E5),
33
+ ),
34
+ ),
35
+ ),
36
+ child: Row(
37
+ children: [
38
+ Builder(
39
+ builder: (context) => IconButton(
40
+ icon: const Icon(Icons.menu),
41
+ onPressed: () => Scaffold.of(context).openDrawer(),
42
+ ),
43
+ ),
44
+ const SizedBox(width: 8),
45
+ Text(
46
+ 'Chat History',
47
+ style: TextStyle(
48
+ fontSize: 20,
49
+ fontWeight: FontWeight.bold,
50
+ color: isDark ? Colors.white : Colors.black,
51
+ ),
52
+ ),
53
+ const Spacer(),
54
+ ],
55
+ ),
56
+ ),
57
+
58
+ // Search Bar
59
+ const ConversationSearchBar(),
60
+
61
+ // List
62
+ Expanded(
63
+ child: groupedConversations.isEmpty
64
+ ? ConversationEmptyState(isSearching: searchQuery.isNotEmpty)
65
+ : ConversationList(
66
+ groupedConversations: groupedConversations,
67
+ activeConversation: activeConversation,
68
+ ),
69
+ ),
70
+ ],
71
+ ),
72
+ );
73
+ }
74
+}
lib/features/servers/views/components/server_card.dart
+192
-112
@@ -54,132 +54,212 @@ class ServerCard extends StatelessWidget {
54
Widget build(BuildContext context) {
55
final theme = Theme.of(context);
56
57
- return Card(
58
- color: isActive
59
- ? theme.colorScheme.primaryContainer.withValues(alpha: 0.3)
60
- : null,
57
+ final activeGreen = const Color(0xFF22C55E);
58
+
59
+ return AnimatedContainer(
60
+ duration: const Duration(milliseconds: 300),
61
+ curve: Curves.easeInOut,
62
+ decoration: BoxDecoration(
63
+ color: isActive
64
+ ? activeGreen.withValues(alpha: 0.08)
65
+ : theme.cardColor,
66
+ borderRadius: BorderRadius.circular(12),
67
+ border: Border.all(
68
+ color: isActive
69
+ ? activeGreen.withValues(alpha: 0.5)
70
+ : theme.dividerColor.withValues(alpha: 0.1),
71
+ width: isActive ? 1.5 : 1,
72
+ ),
73
+ ),
74
+ clipBehavior: Clip.antiAlias,
75
child: InkWell(
76
onTap: onTap,
63
- borderRadius: BorderRadius.circular(8),
64
- child: Padding(
65
- padding: const EdgeInsets.all(16),
66
- child: Row(
67
- children: [
68
- Container(
69
- width: 48,
70
- height: 48,
71
- decoration: BoxDecoration(
72
- // color: theme.colorScheme.primaryContainer,
73
- borderRadius: BorderRadius.circular(8),
77
+ child: Stack(
78
+ children: [
79
+ if (isActive)
80
+ Positioned(
81
+ left: 0,
82
+ top: 0,
83
+ bottom: 0,
84
+ width: 4,
85
+ child: Container(
86
+ decoration: BoxDecoration(
87
+ color: activeGreen,
88
+ borderRadius: const BorderRadius.only(
89
+ topRight: Radius.circular(4),
90
+ bottomRight: Radius.circular(4),
91
+ ),
92
+ ),
93
),
75
- child: _serverIconData != null
76
- ? HugeIcon(
77
- icon: _serverIconData!.icon,
78
- size: 24,
79
- color: theme.colorScheme.primary,
80
- )
81
- : Icon(Icons.dns, color: theme.colorScheme.primary),
94
),
83
- const SizedBox(width: 16),
84
- Expanded(
85
- child: Column(
86
- crossAxisAlignment: CrossAxisAlignment.start,
87
- children: [
88
- Row(
89
- children: [
90
- Expanded(
91
- child: Text(
92
- server.name,
93
- style: theme.textTheme.titleMedium?.copyWith(
94
- fontWeight: FontWeight.w600,
95
- ),
96
- overflow: TextOverflow.ellipsis,
95
+ Padding(
96
+ padding: const EdgeInsets.all(16),
97
+ child: Row(
98
+ children: [
99
+ AnimatedContainer(
100
+ duration: const Duration(milliseconds: 300),
101
+ width: 48,
102
+ height: 48,
103
+ decoration: BoxDecoration(
104
+ color: isActive
105
+ ? activeGreen.withValues(alpha: 0.1)
106
+ : theme.colorScheme.surfaceContainerHighest
107
+ .withValues(alpha: 0.3),
108
+ borderRadius: BorderRadius.circular(12),
109
+ border: Border.all(
110
+ color: isActive
111
+ ? activeGreen.withValues(alpha: 0.2)
112
+ : Colors.transparent,
113
+ ),
114
+ ),
115
+ child: _serverIconData != null
116
+ ? HugeIcon(
117
+ icon: _serverIconData!.icon,
118
+ size: 24,
119
+ color: isActive
120
+ ? activeGreen
121
+ : theme.colorScheme.onSurfaceVariant,
122
+ )
123
+ : Icon(
124
+ Icons.dns,
125
+ color: isActive
126
+ ? activeGreen
127
+ : theme.colorScheme.onSurfaceVariant,
128
),
98
- ),
99
- if (server.isDefault)
100
- Container(
101
- padding: const EdgeInsets.symmetric(
102
- horizontal: 8,
103
- vertical: 2,
104
- ),
105
- decoration: BoxDecoration(
106
- color: theme.colorScheme.primary,
107
- borderRadius: BorderRadius.circular(4),
108
- ),
109
- child: Text(
110
- 'Default',
111
- style: theme.textTheme.labelSmall?.copyWith(
112
- color: theme.colorScheme.onPrimary,
129
+ ),
130
+ const SizedBox(width: 16),
131
+ Expanded(
132
+ child: Column(
133
+ crossAxisAlignment: CrossAxisAlignment.start,
134
+ children: [
135
+ Row(
136
+ children: [
137
+ Expanded(
138
+ child: Text(
139
+ server.name,
140
+ style: theme.textTheme.titleMedium?.copyWith(
141
+ fontWeight: FontWeight.w600,
142
+ ),
143
+ overflow: TextOverflow.ellipsis,
144
),
145
),
115
- ),
116
- ],
117
- ),
118
- const SizedBox(height: 4),
119
- Row(
120
- children: [
121
- Text(_serverTypeName, style: theme.textTheme.bodySmall),
122
- const SizedBox(width: 8),
123
- Text('•', style: theme.textTheme.bodySmall),
124
- const SizedBox(width: 8),
125
- Text(_serverAddress, style: theme.textTheme.bodySmall),
126
- ],
127
- ),
128
- ],
129
- ),
130
- ),
131
- const SizedBox(width: 12),
132
- ConnectionStatusIndicator(status: server.status),
133
- PopupMenuButton<String>(
134
- onSelected: (value) {
135
- switch (value) {
136
- case 'edit':
137
- onEdit?.call();
138
- break;
139
- case 'delete':
140
- onDelete?.call();
141
- break;
142
- case 'setDefault':
143
- onSetDefault?.call();
144
- break;
145
- }
146
- },
147
- itemBuilder: (context) => [
148
- const PopupMenuItem(
149
- value: 'edit',
150
- child: Row(
151
- children: [
152
- Icon(Icons.edit, size: 18),
153
- SizedBox(width: 8),
154
- Text('Edit'),
146
+ if (isActive)
147
+ Container(
148
+ padding: const EdgeInsets.symmetric(
149
+ horizontal: 8,
150
+ vertical: 2,
151
+ ),
152
+ margin: const EdgeInsets.only(right: 4),
153
+ decoration: BoxDecoration(
154
+ color: activeGreen,
155
+ borderRadius: BorderRadius.circular(4),
156
+ ),
157
+ child: Text(
158
+ 'Active',
159
+ style: theme.textTheme.labelSmall?.copyWith(
160
+ color: Colors.white,
161
+ fontWeight: FontWeight.bold,
162
+ ),
163
+ ),
164
+ ),
165
+ if (server.isDefault)
166
+ Container(
167
+ padding: const EdgeInsets.symmetric(
168
+ horizontal: 8,
169
+ vertical: 2,
170
+ ),
171
+ decoration: BoxDecoration(
172
+ color: isActive
173
+ ? activeGreen.withValues(alpha: 0.05)
174
+ : theme.colorScheme.outline
175
+ .withValues(alpha: 0.1),
176
+ borderRadius: BorderRadius.circular(4),
177
+ border: Border.all(
178
+ color: isActive
179
+ ? activeGreen.withValues(alpha: 0.3)
180
+ : theme.colorScheme.outline,
181
+ ),
182
+ ),
183
+ child: Text(
184
+ 'Default',
185
+ style: theme.textTheme.labelSmall?.copyWith(
186
+ color: isActive
187
+ ? activeGreen
188
+ : theme.colorScheme.outline,
189
+ ),
190
+ ),
191
+ ),
192
+ ],
193
+ ),
194
+ const SizedBox(height: 4),
195
+ Row(
196
+ children: [
197
+ Text(_serverTypeName,
198
+ style: theme.textTheme.bodySmall),
199
+ const SizedBox(width: 8),
200
+ Text('•', style: theme.textTheme.bodySmall),
201
+ const SizedBox(width: 8),
202
+ Text(_serverAddress,
203
+ style: theme.textTheme.bodySmall),
204
+ ],
205
+ ),
206
],
207
),
208
),
158
- if (!server.isDefault)
159
- const PopupMenuItem(
160
- value: 'setDefault',
161
- child: Row(
162
- children: [
163
- Icon(Icons.star, size: 18),
164
- SizedBox(width: 8),
165
- Text('Set as Default'),
166
- ],
209
+ const SizedBox(width: 12),
210
+ ConnectionStatusIndicator(status: server.status),
211
+ PopupMenuButton<String>(
212
+ onSelected: (value) {
213
+ switch (value) {
214
+ case 'edit':
215
+ onEdit?.call();
216
+ break;
217
+ case 'delete':
218
+ onDelete?.call();
219
+ break;
220
+ case 'setDefault':
221
+ onSetDefault?.call();
222
+ break;
223
+ }
224
+ },
225
+ itemBuilder: (context) => [
226
+ const PopupMenuItem(
227
+ value: 'edit',
228
+ child: Row(
229
+ children: [
230
+ Icon(Icons.edit, size: 18),
231
+ SizedBox(width: 8),
232
+ Text('Edit'),
233
+ ],
234
+ ),
235
),
168
- ),
169
- const PopupMenuItem(
170
- value: 'delete',
171
- child: Row(
172
- children: [
173
- Icon(Icons.delete, size: 18, color: Colors.red),
174
- SizedBox(width: 8),
175
- Text('Delete', style: TextStyle(color: Colors.red)),
176
- ],
177
- ),
236
+ if (!server.isDefault)
237
+ const PopupMenuItem(
238
+ value: 'setDefault',
239
+ child: Row(
240
+ children: [
241
+ Icon(Icons.star, size: 18),
242
+ SizedBox(width: 8),
243
+ Text('Set as Default'),
244
+ ],
245
+ ),
246
+ ),
247
+ const PopupMenuItem(
248
+ value: 'delete',
249
+ child: Row(
250
+ children: [
251
+ Icon(Icons.delete, size: 18, color: Colors.red),
252
+ SizedBox(width: 8),
253
+ Text('Delete', style: TextStyle(color: Colors.red)),
254
+ ],
255
+ ),
256
+ ),
257
+ ],
258
),
259
],
260
),
181
- ],
182
- ),
261
+ ),
262
+ ],
263
),
264
),
265
);
lib/features/sidebar/components/conversation_drawer_header.dart
+2
-1
@@ -1,4 +1,5 @@
1
import 'package:flutter/material.dart';
2
+import 'package:go_router/go_router.dart';
3
import 'package:localmind/core/routes/app_routes.dart';
4
5
class ConversationDrawerHeader extends StatelessWidget {
@@ -45,7 +46,7 @@ class ConversationDrawerHeader extends StatelessWidget {
46
),
47
onPressed: () {
48
Navigator.pop(context); // Close drawer
48
- Navigator.of(context).pushNamed(AppRoutes.settings);
49
+ context.push(AppRoutes.settings);
50
},
51
),
52
],
lib/features/sidebar/sidebar_widget.dart
+5
-5
@@ -24,9 +24,9 @@ class SidebarWidget extends ConsumerWidget {
24
final searchQuery = ref.watch(conversationSearchProvider);
25
26
final location = GoRouterState.of(context).uri.toString();
27
- final isHome = location == AppRoutes.home || location.isEmpty;
27
final isServers = location.startsWith(AppRoutes.servers);
28
final isPersonas = location.startsWith(AppRoutes.personas);
29
+ final isHistory = location.startsWith(AppRoutes.chatHistory);
30
31
return Container(
32
width: 300,
@@ -58,11 +58,11 @@ class SidebarWidget extends ConsumerWidget {
58
const ActiveServerIndicator(),
59
const SizedBox(height: 8),
60
DrawerNavItem(
61
- iconData: HugeIcons.strokeRoundedMessageMultiple01,
62
- label: 'Chat',
63
- isSelected: isHome,
61
+ iconData: HugeIcons.strokeRoundedClock01,
62
+ label: 'History',
63
+ isSelected: isHistory,
64
onTap: () {
65
- context.go(AppRoutes.home);
65
+ context.go(AppRoutes.chatHistory);
66
if (Scaffold.maybeOf(context)?.isDrawerOpen ?? false) {
67
Navigator.pop(context);
68
}
pubspec.yaml
+1
-1
@@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
16
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
17
# In Windows, build-name is used as the major, minor, and patch parts
18
# of the product and file versions while build-number is used as the build suffix.
19
-version: 1.0.0+4
19
+version: 1.0.0+5
20
21
environment:
22
sdk: ^3.11.0