lemonade-sdk 8.0.0__tar.gz → 8.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of lemonade-sdk might be problematic. Click here for more details.

Files changed (77) hide show
  1. {lemonade_sdk-8.0.0/src/lemonade_sdk.egg-info → lemonade_sdk-8.0.2}/PKG-INFO +6 -2
  2. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/README.md +5 -1
  3. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/report/table.py +9 -0
  4. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/server/llamacpp.py +34 -16
  5. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/server/serve.py +15 -0
  6. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/server/tray.py +19 -6
  7. lemonade_sdk-8.0.2/src/lemonade/version.py +1 -0
  8. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2/src/lemonade_sdk.egg-info}/PKG-INFO +6 -2
  9. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade_server/cli.py +14 -12
  10. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade_server/pydantic_models.py +1 -0
  11. lemonade_sdk-8.0.0/src/lemonade/version.py +0 -1
  12. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/LICENSE +0 -0
  13. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/NOTICE.md +0 -0
  14. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/pyproject.toml +0 -0
  15. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/setup.cfg +0 -0
  16. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/setup.py +0 -0
  17. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/__init__.py +0 -0
  18. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/api.py +0 -0
  19. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/cache.py +0 -0
  20. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/cli.py +0 -0
  21. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/common/__init__.py +0 -0
  22. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/common/build.py +0 -0
  23. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/common/cli_helpers.py +0 -0
  24. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/common/exceptions.py +0 -0
  25. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/common/filesystem.py +0 -0
  26. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/common/network.py +0 -0
  27. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/common/printing.py +0 -0
  28. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/common/status.py +0 -0
  29. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/common/system_info.py +0 -0
  30. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/common/test_helpers.py +0 -0
  31. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/profilers/__init__.py +0 -0
  32. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/profilers/memory_tracker.py +0 -0
  33. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/profilers/profiler.py +0 -0
  34. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/sequence.py +0 -0
  35. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/state.py +0 -0
  36. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/__init__.py +0 -0
  37. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/accuracy.py +0 -0
  38. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/adapter.py +0 -0
  39. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/bench.py +0 -0
  40. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/huggingface/bench.py +0 -0
  41. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/huggingface/load.py +0 -0
  42. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/huggingface/utils.py +0 -0
  43. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/humaneval.py +0 -0
  44. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/llamacpp/bench.py +0 -0
  45. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/llamacpp/load.py +0 -0
  46. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/management_tools.py +0 -0
  47. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/mmlu.py +0 -0
  48. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/oga/__init__.py +0 -0
  49. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/oga/bench.py +0 -0
  50. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/oga/load.py +0 -0
  51. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/oga/utils.py +0 -0
  52. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/perplexity.py +0 -0
  53. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/prompt.py +0 -0
  54. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/quark/__init__.py +0 -0
  55. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/quark/quark_load.py +0 -0
  56. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/quark/quark_quantize.py +0 -0
  57. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/report/__init__.py +0 -0
  58. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/report/llm_report.py +0 -0
  59. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/server/__init__.py +0 -0
  60. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/server/static/favicon.ico +0 -0
  61. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/server/static/styles.css +0 -0
  62. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/server/static/webapp.html +0 -0
  63. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/server/tool_calls.py +0 -0
  64. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/server/utils/port.py +0 -0
  65. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/server/utils/system_tray.py +0 -0
  66. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/server/utils/thread.py +0 -0
  67. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/server/webapp.py +0 -0
  68. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade/tools/tool.py +0 -0
  69. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade_install/__init__.py +0 -0
  70. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade_install/install.py +0 -0
  71. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade_sdk.egg-info/SOURCES.txt +0 -0
  72. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade_sdk.egg-info/dependency_links.txt +0 -0
  73. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade_sdk.egg-info/entry_points.txt +0 -0
  74. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade_sdk.egg-info/requires.txt +0 -0
  75. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade_sdk.egg-info/top_level.txt +0 -0
  76. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade_server/model_manager.py +0 -0
  77. {lemonade_sdk-8.0.0 → lemonade_sdk-8.0.2}/src/lemonade_server/server_models.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lemonade-sdk
3
- Version: 8.0.0
3
+ Version: 8.0.2
4
4
  Summary: Lemonade SDK: Your LLM Aide for Validation and Deployment
5
5
  Author-email: lemonade@amd.com
6
6
  Requires-Python: >=3.10, <3.12
@@ -133,7 +133,7 @@ Maximum LLM performance requires the right hardware accelerator with the right i
133
133
  <tr>
134
134
  <td>🎮 GPU</td>
135
135
  <td align="center">—</td>
136
- <td align="center">Vulkan: All platforms<br><small>Focus: Radeon™ 7000/9000</small></td>
136
+ <td align="center">Vulkan: All platforms<br><small>Focus:<br/>Ryzen™ AI 7000/8000/300<br/>Radeon™ 7000/9000</small></td>
137
137
  <td align="center">—</td>
138
138
  <td align="center">✅</td>
139
139
  <td align="center">✅</td>
@@ -158,6 +158,10 @@ Maximum LLM performance requires the right hardware accelerator with the right i
158
158
  | **llamacpp** | Community-driven engine with strong GPU acceleration, support for thousands of `.gguf` models, and advanced features such as vision-language models (VLMs) and mixture-of-experts (MoEs). |
159
159
  | **Hugging Face (HF)** | Hugging Face's `transformers` library can run the original `.safetensors` trained weights for models on Meta's PyTorch engine, which provides a source of truth for accuracy measurement. |
160
160
 
161
+ ## Integrate Lemonade Server with Your Application
162
+
163
+ Lemonade Server enables languages including Python, C++, Java, C#, Node.js, Go, Ruby, Rust, and PHP. For the full list and integration details, see [docs/server/README.md](./docs/server/README.md).
164
+
161
165
  ## Contributing
162
166
 
163
167
  We are actively seeking collaborators from across the industry. If you would like to contribute to this project, please check out our [contribution guide](./docs/contribute.md).
@@ -55,7 +55,7 @@ Maximum LLM performance requires the right hardware accelerator with the right i
55
55
  <tr>
56
56
  <td>🎮 GPU</td>
57
57
  <td align="center">—</td>
58
- <td align="center">Vulkan: All platforms<br><small>Focus: Radeon™ 7000/9000</small></td>
58
+ <td align="center">Vulkan: All platforms<br><small>Focus:<br/>Ryzen™ AI 7000/8000/300<br/>Radeon™ 7000/9000</small></td>
59
59
  <td align="center">—</td>
60
60
  <td align="center">✅</td>
61
61
  <td align="center">✅</td>
@@ -80,6 +80,10 @@ Maximum LLM performance requires the right hardware accelerator with the right i
80
80
  | **llamacpp** | Community-driven engine with strong GPU acceleration, support for thousands of `.gguf` models, and advanced features such as vision-language models (VLMs) and mixture-of-experts (MoEs). |
81
81
  | **Hugging Face (HF)** | Hugging Face's `transformers` library can run the original `.safetensors` trained weights for models on Meta's PyTorch engine, which provides a source of truth for accuracy measurement. |
82
82
 
83
+ ## Integrate Lemonade Server with Your Application
84
+
85
+ Lemonade Server enables languages including Python, C++, Java, C#, Node.js, Go, Ruby, Rust, and PHP. For the full list and integration details, see [docs/server/README.md](./docs/server/README.md).
86
+
83
87
  ## Contributing
84
88
 
85
89
  We are actively seeking collaborators from across the industry. If you would like to contribute to this project, please check out our [contribution guide](./docs/contribute.md).
@@ -7,6 +7,7 @@ from tabulate import tabulate
7
7
  import lemonade.common.build as build
8
8
  import lemonade.common.filesystem as fs
9
9
  from lemonade.cache import Keys
10
+ from lemonade.tools.accuracy import LMEvalHarness
10
11
  from lemonade.tools.huggingface.bench import HuggingfaceBench
11
12
  from lemonade.tools.llamacpp.bench import LlamaCppBench
12
13
  from lemonade.tools.mmlu import AccuracyMMLU
@@ -527,6 +528,14 @@ class LemonadePerfTable(Table):
527
528
  ".2f",
528
529
  )
529
530
  ],
531
+ LMEvalHarness: [
532
+ AdditionalStat(
533
+ "EleutherAI\nLM Evaluation",
534
+ "^lm_eval_",
535
+ "^lm_eval_",
536
+ ".1f",
537
+ )
538
+ ],
530
539
  },
531
540
  "last_columns": [
532
541
  SimpleStat(
@@ -416,25 +416,43 @@ def chat_completion(
416
416
  exclude_unset=True, exclude_none=True
417
417
  )
418
418
 
419
- def event_stream():
419
+ # Check if streaming is requested
420
+ if chat_completion_request.stream:
421
+
422
+ def event_stream():
423
+ try:
424
+ # Enable streaming
425
+ for chunk in client.chat.completions.create(**request_dict):
426
+ yield f"data: {chunk.model_dump_json()}\n\n"
427
+ yield "data: [DONE]\n\n"
428
+
429
+ # Show telemetry after completion
430
+ telemetry.show_telemetry()
431
+
432
+ except Exception as e: # pylint: disable=broad-exception-caught
433
+ yield f'data: {{"error": "{str(e)}"}}\n\n'
434
+
435
+ return StreamingResponse(
436
+ event_stream(),
437
+ media_type="text/event-stream",
438
+ headers={
439
+ "Cache-Control": "no-cache",
440
+ "Connection": "keep-alive",
441
+ },
442
+ )
443
+ else:
444
+ # Non-streaming response
420
445
  try:
421
- # Enable streaming
422
- request_dict["stream"] = True
423
- for chunk in client.chat.completions.create(**request_dict):
424
- yield f"data: {chunk.model_dump_json()}\n\n"
425
- yield "data: [DONE]\n\n"
446
+ # Disable streaming for non-streaming requests
447
+ response = client.chat.completions.create(**request_dict)
426
448
 
427
449
  # Show telemetry after completion
428
450
  telemetry.show_telemetry()
429
451
 
452
+ return response
453
+
430
454
  except Exception as e: # pylint: disable=broad-exception-caught
431
- yield f'data: {{"error": "{str(e)}"}}\n\n'
432
-
433
- return StreamingResponse(
434
- event_stream(),
435
- media_type="text/event-stream",
436
- headers={
437
- "Cache-Control": "no-cache",
438
- "Connection": "keep-alive",
439
- },
440
- )
455
+ raise HTTPException(
456
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
457
+ detail=f"Chat completion error: {str(e)}",
458
+ )
@@ -29,6 +29,7 @@ from openai.types.chat.chat_completion_message_tool_call import (
29
29
  ChatCompletionMessageToolCall,
30
30
  Function,
31
31
  )
32
+ from openai.types.completion_usage import CompletionUsage
32
33
  from openai.types.chat.chat_completion import Choice
33
34
  from openai.types.chat.chat_completion_chunk import (
34
35
  ChoiceDelta,
@@ -576,9 +577,16 @@ class Server(ManagementTool):
576
577
  logprobs=logprobs,
577
578
  )
578
579
 
580
+ usage = CompletionUsage(
581
+ prompt_tokens=self.input_tokens,
582
+ completion_tokens=self.output_tokens,
583
+ total_tokens=self.input_tokens + self.output_tokens,
584
+ )
585
+
579
586
  return Completion(
580
587
  id="0",
581
588
  choices=[choice],
589
+ usage=usage,
582
590
  model=self.llm_loaded.checkpoint,
583
591
  object="text_completion",
584
592
  created=int(time.time()),
@@ -773,9 +781,16 @@ class Server(ManagementTool):
773
781
  logprobs=None,
774
782
  )
775
783
 
784
+ usage = CompletionUsage(
785
+ prompt_tokens=self.input_tokens,
786
+ completion_tokens=self.output_tokens,
787
+ total_tokens=self.input_tokens + self.output_tokens,
788
+ )
789
+
776
790
  return ChatCompletion(
777
791
  id="0",
778
792
  choices=[choice],
793
+ usage=usage,
779
794
  model=self.llm_loaded.checkpoint,
780
795
  object="chat.completion",
781
796
  created=int(time.time()),
@@ -266,7 +266,7 @@ class LemonadeTray(SystemTray):
266
266
  self.logger.error(f"Error changing port: {str(e)}")
267
267
  self.show_balloon_notification("Error", f"Failed to change port: {str(e)}")
268
268
 
269
- def upgrade_to_latest(self, icon, item):
269
+ def upgrade_to_latest(self, _, __):
270
270
  """
271
271
  Download and launch the Lemonade Server installer
272
272
  """
@@ -281,21 +281,34 @@ class LemonadeTray(SystemTray):
281
281
  installer_path = os.path.join(
282
282
  tempfile.gettempdir(), "Lemonade_Server_Installer.exe"
283
283
  )
284
+ if os.path.exists(installer_path):
285
+ os.remove(installer_path)
284
286
 
285
287
  # Download the installer
286
288
  response = requests.get(self.latest_version_url, stream=True)
287
289
  response.raise_for_status()
288
290
 
289
- # Save the installer to disk
291
+ # Save the installer to disk and force write to disk
290
292
  with open(installer_path, "wb") as f:
291
293
  for chunk in response.iter_content(chunk_size=8192):
292
294
  f.write(chunk)
295
+ f.flush()
296
+ os.fsync(f.fileno())
293
297
 
294
- # Launch the installer
295
- subprocess.Popen([installer_path], shell=True)
298
+ # Launch the installer as a completely detached process
299
+ # subprocess.DETACHED_PROCESS - Creates a process that's not attached to the console
300
+ # subprocess.CREATE_NEW_PROCESS_GROUP - Creates a new process group
301
+ # close_fds=True - Closes file descriptors to prevent inheritance
302
+ subprocess.Popen(
303
+ [installer_path],
304
+ creationflags=subprocess.DETACHED_PROCESS
305
+ | subprocess.CREATE_NEW_PROCESS_GROUP,
306
+ close_fds=True,
307
+ shell=True,
308
+ cwd=tempfile.gettempdir(),
309
+ )
296
310
 
297
- # Quit the application
298
- self.exit_app(icon, item)
311
+ # No need to quit the application, the installer will handle it
299
312
 
300
313
  def create_menu(self):
301
314
  """
@@ -0,0 +1 @@
1
+ __version__ = "8.0.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lemonade-sdk
3
- Version: 8.0.0
3
+ Version: 8.0.2
4
4
  Summary: Lemonade SDK: Your LLM Aide for Validation and Deployment
5
5
  Author-email: lemonade@amd.com
6
6
  Requires-Python: >=3.10, <3.12
@@ -133,7 +133,7 @@ Maximum LLM performance requires the right hardware accelerator with the right i
133
133
  <tr>
134
134
  <td>🎮 GPU</td>
135
135
  <td align="center">—</td>
136
- <td align="center">Vulkan: All platforms<br><small>Focus: Radeon™ 7000/9000</small></td>
136
+ <td align="center">Vulkan: All platforms<br><small>Focus:<br/>Ryzen™ AI 7000/8000/300<br/>Radeon™ 7000/9000</small></td>
137
137
  <td align="center">—</td>
138
138
  <td align="center">✅</td>
139
139
  <td align="center">✅</td>
@@ -158,6 +158,10 @@ Maximum LLM performance requires the right hardware accelerator with the right i
158
158
  | **llamacpp** | Community-driven engine with strong GPU acceleration, support for thousands of `.gguf` models, and advanced features such as vision-language models (VLMs) and mixture-of-experts (MoEs). |
159
159
  | **Hugging Face (HF)** | Hugging Face's `transformers` library can run the original `.safetensors` trained weights for models on Meta's PyTorch engine, which provides a source of truth for accuracy measurement. |
160
160
 
161
+ ## Integrate Lemonade Server with Your Application
162
+
163
+ Lemonade Server enables languages including Python, C++, Java, C#, Node.js, Go, Ruby, Rust, and PHP. For the full list and integration details, see [docs/server/README.md](./docs/server/README.md).
164
+
161
165
  ## Contributing
162
166
 
163
167
  We are actively seeking collaborators from across the industry. If you would like to contribute to this project, please check out our [contribution guide](./docs/contribute.md).
@@ -4,7 +4,6 @@ import os
4
4
  from typing import Tuple, Optional
5
5
  import psutil
6
6
  from typing import List
7
- import subprocess
8
7
 
9
8
 
10
9
  # Error codes for different CLI scenarios
@@ -88,23 +87,26 @@ def stop():
88
87
  # Terminate the main process first
89
88
  process.terminate()
90
89
 
91
- # Then terminate all children
90
+ # Then terminate llama-server child process (known to be stubborn)
91
+ # We avoid killing other child processes, such as the installer
92
92
  for child in children:
93
- try:
94
- child.terminate()
95
- except psutil.NoSuchProcess:
96
- pass # Child already terminated
93
+ if "llama-server" in child.name():
94
+ try:
95
+ child.terminate()
96
+ except psutil.NoSuchProcess:
97
+ pass # Child already terminated
97
98
 
98
99
  # Wait for main process
99
100
  process.wait(timeout=10)
100
101
 
101
- # Kill any children that didn't terminate gracefully
102
+ # Kill llama-server child process if it didn't terminate gracefully
102
103
  for child in children:
103
- try:
104
- if child.is_running():
105
- child.kill()
106
- except psutil.NoSuchProcess:
107
- pass # Child already terminated
104
+ if "llama-server" in child.name():
105
+ try:
106
+ if child.is_running():
107
+ child.kill()
108
+ except psutil.NoSuchProcess:
109
+ pass # Child already terminated
108
110
  except psutil.NoSuchProcess:
109
111
  # Process already terminated
110
112
  pass
@@ -62,6 +62,7 @@ class ChatCompletionRequest(BaseModel):
62
62
  tools: list[dict] | None = None
63
63
  max_tokens: int | None = None
64
64
  max_completion_tokens: int | None = None
65
+ response_format: dict | None = None
65
66
 
66
67
 
67
68
  class ResponsesRequest(BaseModel):
@@ -1 +0,0 @@
1
- __version__ = "8.0.0"
File without changes
File without changes
File without changes
File without changes