openrouter-provider 0.0.7__tar.gz → 0.0.8__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 openrouter-provider might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openrouter-provider
3
- Version: 0.0.7
3
+ Version: 0.0.8
4
4
  Summary: This is an unofficial wrapper of OpenRouter.
5
5
  Author-email: Keisuke Miyamto <aichiboyhighschool@gmail.com>
6
6
  Requires-Python: >=3.7
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openrouter-provider"
3
- version = "0.0.7"
3
+ version = "0.0.8"
4
4
  description = "This is an unofficial wrapper of OpenRouter."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.7"
@@ -6,6 +6,7 @@ from dotenv import load_dotenv
6
6
  import time
7
7
  import json
8
8
  from typing import Iterator, AsyncIterator
9
+ from pydantic import BaseModel
9
10
 
10
11
 
11
12
  _base_system_prompt = """
@@ -90,7 +91,7 @@ class Chatbot_manager:
90
91
  system_prompt=self._system_prompt,
91
92
  querys=self._memory,
92
93
  tools=self.tools + tools,
93
- provider=provider
94
+ provider=provider,
94
95
  )
95
96
  reply.answeredBy = model
96
97
  self._memory.append(reply)
@@ -201,4 +202,14 @@ class Chatbot_manager:
201
202
 
202
203
  self._memory.append(Chat_message(text=text, role=Role.ai, answerdBy=model))
203
204
 
204
-
205
+ def structured_output(self, model: LLMModel, query: Chat_message, provider:ProviderConfig=None, json_schema: BaseModel=None) -> BaseModel:
206
+ self._memory.append(query)
207
+ client = OpenRouterProvider()
208
+ reply = client.structured_output(
209
+ model=model,
210
+ system_prompt=self._system_prompt,
211
+ querys=self._memory,
212
+ provider=provider,
213
+ json_schema=json_schema
214
+ )
215
+ return reply
@@ -1,3 +1,7 @@
1
+
2
+ # structured output
3
+ # https://note.com/brave_quince241/n/n60a5759c8f05
4
+
1
5
  import logging
2
6
  from .Chat_message import *
3
7
  from .Tool import tool_model
@@ -10,6 +14,8 @@ import os, time
10
14
  from dataclasses import dataclass, field, asdict
11
15
  from typing import List, Optional, Literal, Iterator, AsyncIterator
12
16
  from pprint import pprint
17
+ from pydantic import BaseModel
18
+
13
19
 
14
20
  # エラーのみ表示、詳細なトレースバック付き
15
21
  logging.basicConfig(level=logging.ERROR, format="%(asctime)s - %(levelname)s - %(message)s")
@@ -87,7 +93,7 @@ class OpenRouterProvider:
87
93
  "tool_call_id": str(t.id),
88
94
  "content": str(t.result)
89
95
  })
90
-
96
+
91
97
  return messages
92
98
 
93
99
  def invoke(self, model: LLMModel, system_prompt: Chat_message, querys: list[Chat_message], tools: list[tool_model] = [], provider: ProviderConfig = None) -> Chat_message:
@@ -96,12 +102,12 @@ class OpenRouterProvider:
96
102
 
97
103
  tool_defs = [tool.tool_definition for tool in tools] if tools else None
98
104
  provider_dict = provider.to_dict() if provider else None
99
-
105
+
100
106
  response = self.client.chat.completions.create(
101
107
  model=model.name,
102
108
  messages=messages,
103
109
  tools=tool_defs,
104
- extra_body={"provider": provider_dict}
110
+ extra_body={"provider": provider_dict},
105
111
  )
106
112
 
107
113
  reply = Chat_message(text=response.choices[0].message.content, role=Role.ai, raw_response=response)
@@ -199,4 +205,21 @@ class OpenRouterProvider:
199
205
  logger.exception(f"An error occurred while asynchronously streaming the model: {e.__class__.__name__}: {str(e)}")
200
206
  return
201
207
 
208
+ def structured_output(self, model: LLMModel, system_prompt: Chat_message, querys: list[Chat_message], provider: ProviderConfig = None, json_schema: BaseModel = None) -> BaseModel:
209
+ try:
210
+ messages = self.make_prompt(system_prompt, querys)
211
+ provider_dict = provider.to_dict() if provider else None
212
+
213
+ response = self.client.chat.completions.create(
214
+ model=model.name,
215
+ messages=messages,
216
+ response_format={"type": "json_schema", "json_schema": {"name": json_schema.__name__, "schema": json_schema.model_json_schema()}},
217
+ extra_body={"provider": provider_dict},
218
+ )
219
+
220
+ return json_schema.model_validate_json(response.choices[0].message.content)
221
+
222
+ except Exception as e:
223
+ logger.exception(f"An error occurred while invoking structured output: {e.__class__.__name__}: {str(e)}")
224
+ return Chat_message(text="Fail to get response. Please see the error message.", role=Role.ai, raw_response=None)
202
225
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openrouter-provider
3
- Version: 0.0.7
3
+ Version: 0.0.8
4
4
  Summary: This is an unofficial wrapper of OpenRouter.
5
5
  Author-email: Keisuke Miyamto <aichiboyhighschool@gmail.com>
6
6
  Requires-Python: >=3.7