# -*- coding: utf-8 -*- import os import logging import requests, json from odoo import api, fields, models, _ from odoo.exceptions import UserError # todo: 暂时直接 requests # from bardapi import Bard _logger = logging.getLogger(__name__) class AiRobot(models.Model): _inherit = 'ai.robot' provider = fields.Selection( selection_add=[('google', 'Google Ai')], ondelete={'google': 'set default'} ) set_ai_model = fields.Selection( selection_add=[('google-bard', 'Google Bard')], ondelete={'google-bard': 'set default'}) @api.onchange('provider') def _onchange_provider(self): if self.provider == 'google': self.endpoint = 'https://api.bard.ai/v1/text/generate' return super()._onchange_provider() def get_google(self, data, author_id, answer_id, param={}): self.ensure_one() headers = {"Content-Type": "application/json", "Authorization": f"Bearer {self.openapi_api_key}"} R_TIMEOUT = self.ai_timeout or 120 o_url = self.endpoint or "https://api.bard.ai/v1/text/generate" # todo: 更多参数如 prompt, max_length max_tokens = param.get('max_tokens') if param.get('max_tokens') else self.max_tokens temperature = param.get('temperature') if param.get('temperature') else self.temperature pdata = { "text": data, "max_length": max_tokens, "temperature": temperature, } response = requests.post(o_url, data=json.dumps(pdata), headers=headers, timeout=R_TIMEOUT) response.raise_for_status() try: res = response.json()['text'] return res except Exception as e: _logger.warning("Get Response Json failed: %s", e) else: _logger.warning('=====================Openai output data: %s' % response.json()) def get_google_post(self, res, author_id=False, answer_id=False, param={}): if self.provider == 'google': content = res['text'] return content, False, True