55
66
77def install_openrouter (ctx ):
8- from llms .main import GeneratorBase
8+ from llms .main import GeneratorBase , OpenAiCompatible
99
1010 # https://openrouter.ai/docs/guides/overview/multimodal/image-generation
1111 class OpenRouterGenerator (GeneratorBase ):
@@ -53,6 +53,8 @@ async def chat(self, chat, provider=None, context=None):
5353 chat_url = provider .chat_url
5454 # remove tools
5555 chat .pop ("tools" , None )
56+ # most image models fail if specifying text modality, e.g: ["image","text"]
57+ chat ["modalities" ] = ["image" ]
5658 chat = await self .process_chat (chat , provider_id = self .id )
5759 ctx .log (f"POST { chat_url } " )
5860 ctx .log (provider .chat_summary (chat ))
@@ -71,4 +73,12 @@ async def chat(self, chat, provider=None, context=None):
7173 self .to_response (await self .response_json (response ), chat , started_at , context = context )
7274 )
7375
76+ class OpenRouterProvider (OpenAiCompatible ):
77+ sdk = "@openrouter/ai-sdk-provider"
78+
79+ def __init__ (self , ** kwargs ):
80+ super ().__init__ (** kwargs )
81+ self .modalities ["image" ] = OpenRouterGenerator (** kwargs )
82+
7483 ctx .add_provider (OpenRouterGenerator )
84+ ctx .add_provider (OpenRouterProvider )
0 commit comments