Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
d3e2078
[5192][ADD] openai_connector
nobuQuartile Jun 9, 2025
db7d6f8
for pre-commit
nobuQuartile Jun 9, 2025
4e47071
delete chatgpt_integration
nobuQuartile Jun 9, 2025
2db4688
upd
nobuQuartile Jun 9, 2025
979c976
add log and creater module, delete message
nobuQuartile Jun 11, 2025
a5522ca
delete openai_vission_session_log model
nobuQuartile Jun 13, 2025
894acb6
adj
AungKoKoLin1997 Jun 16, 2025
f8a00e4
add readme openai_connector and fix some ci error
nobuQuartile Jun 16, 2025
f8ea52d
fix product_name_generator data error
nobuQuartile Jun 16, 2025
f21583e
fix
nobuQuartile Jun 18, 2025
1577760
fix
nobuQuartile Jun 18, 2025
d748bfd
AGPL to LGPL
nobuQuartile Jun 18, 2025
e250bb5
upd
nobuQuartile Jun 18, 2025
833277d
upd
nobuQuartile Jun 18, 2025
4274e22
upd
nobuQuartile Jun 18, 2025
21064ab
upd
nobuQuartile Jun 18, 2025
02e0db0
upd
nobuQuartile Jun 19, 2025
ed4bb9f
use json dump and loads for inputs
nobuQuartile Jun 27, 2025
5ce3adc
update image_url from data to url
nobuQuartile Jun 27, 2025
ab17260
pre-commit run
nobuQuartile Jun 27, 2025
e253058
adj
AungKoKoLin1997 Jun 30, 2025
d2e6f1a
adj
AungKoKoLin1997 Jul 1, 2025
195912d
adj
AungKoKoLin1997 Jul 3, 2025
1828ec9
add readonly
AungKoKoLin1997 Jul 3, 2025
f4f6598
adj
AungKoKoLin1997 Jul 3, 2025
c2cd518
change license
AungKoKoLin1997 Jul 7, 2025
dbff0c4
fix
nobuQuartile Jul 7, 2025
3c2b3ba
upd readme
nobuQuartile Jul 7, 2025
ef29002
xml indent
nobuQuartile Jul 7, 2025
23c088c
format xml
nobuQuartile Jul 7, 2025
173b10f
format xml
nobuQuartile Jul 7, 2025
60dd560
upd please dont review
nobuQuartile Jul 10, 2025
acdba34
upd depends on webservice
nobuQuartile Jul 14, 2025
d5007ec
upd pre-commit
nobuQuartile Jul 15, 2025
5cb6ab8
upd
nobuQuartile Jul 15, 2025
8dd982c
upd readme & add api_connecter data
nobuQuartile Jul 17, 2025
64f82d0
upd field's help
nobuQuartile Jul 18, 2025
f712668
requirements.txt
nobuQuartile Jul 18, 2025
98d27b1
upd about most of Yoshi-san review
nobuQuartile Jul 25, 2025
e7e700d
delete requirement.txt
nobuQuartile Jul 25, 2025
7556814
readme
nobuQuartile Jul 25, 2025
308789f
adj
AungKoKoLin1997 Jul 28, 2025
0b8113e
upd product_name_generator's readme
nobuQuartile Jul 30, 2025
fc6f173
translation
nobuQuartile Jul 30, 2025
866051e
upd
nobuQuartile Aug 4, 2025
0b1b084
upd readme
nobuQuartile Aug 4, 2025
b81ef97
upd readme
nobuQuartile Aug 4, 2025
eb6ef97
upd ja.po
nobuQuartile Aug 20, 2025
2416835
Update ja.po about Visionセッション
nobuQuartile Aug 20, 2025
bbaf425
add RetryableJobError
nobuQuartile Aug 26, 2025
a71e3c0
upd error
nobuQuartile Aug 26, 2025
79acfe3
Update product_name_generator/models/product_template.py
nobuQuartile Sep 3, 2025
43c68e8
error handling Timeout while downloading
nobuQuartile Sep 4, 2025
2ac710b
upd product_name_generator data key name
nobuQuartile Sep 17, 2025
22b2d95
upd endpoint
nobuQuartile Sep 18, 2025
e7ec5a4
imp
AungKoKoLin1997 Sep 18, 2025
f389c82
upd
nobuQuartile Sep 24, 2025
9f954b8
[test
nobuQuartile Oct 8, 2025
1f9d695
upd test 2
nobuQuartile Oct 8, 2025
1dea9ee
upd
nobuQuartile Oct 8, 2025
234b43a
upd test-requirement
nobuQuartile Oct 8, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions openai_connector/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
================
OpenAI Connector
================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:30c53be77f7ad65281a7975a7a3cf834cc69470e0b2c9844b12f0a5a81ebae7d
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-qrtl%2Frmm--custom-lightgray.png?logo=github
:target: https://github.com/qrtl/rmm-custom/tree/15.0/openai_connector
:alt: qrtl/rmm-custom

|badge1| |badge2| |badge3|

This module defines openai.vision.session, which enables programmatic
access to OpenAI. It supports multimodal input (images and text),
optional web search, and structured output via JSON Schema.

The module is designed as a backend service and is intended to be
invoked by other modules.

**Table of contents**

.. contents::
:local:

Configuration
=============

For the OpenAI API configuration:

- Only the api_key field is required to be set.
- The base_url, token_type, and header_api_key_string are prefilled by
this module.

Basically, the OpenAI session should be added by a specific module that
depends on this one. Adjust the session attributes:

- Go to Settings → Technical →OpenAI Vision Sessions.

For additional options and usage details, refer to the official
documentation: https://platform.openai.com/docs

Usage
=====

This module is intended to be used programmatically by other Odoo
modules. You create and configure ``openai.vision.session`` records and
call the method ``call_openai()`` from your own business logic.

For example, a product name generator module may call this module's
session as follows:

.. code:: python

session = self.env["openai.vision.session"].search(
[("reference_code", "=", "product_name_generation")],
limit=1,
)
input_image = f"{base_url}/web/image/{self._name}/{self.id}/image_1920"
input_data = json.dumps([
{"role": "user", "content": [{"type": "input_image", "image_url": image_url}]}
])
response = session.call_openai(input_data)

It is advised to delegate execution to background job queues (e.g.,
queue.job) for asynchronous and fault-tolerant processing.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/qrtl/rmm-custom/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/qrtl/rmm-custom/issues/new?body=module:%20openai_connector%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* Quartile

Maintainers
-----------

This module is part of the `qrtl/rmm-custom <https://github.com/qrtl/rmm-custom/tree/15.0/openai_connector>`_ project on GitHub.

You are welcome to contribute.
1 change: 1 addition & 0 deletions openai_connector/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
17 changes: 17 additions & 0 deletions openai_connector/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Copyright 2025 Quartile (https://www.quartile.co)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
Comment thread
AungKoKoLin1997 marked this conversation as resolved.
"name": "OpenAI Connector",
"version": "15.0.1.0.0",
"author": "Quartile",
"license": "AGPL-3",
"website": "https://www.quartile.co",
"depends": ["base_api_connection"],
"data": [
"data/api_config.xml",
"security/ir.model.access.csv",
"views/openai_vision_session_views.xml",
],
"installable": True,
}
10 changes: 10 additions & 0 deletions openai_connector/data/api_config.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<odoo noupdate="1">
<record id="api_config_openai" model="api.config">
<field name="name">OpenAI</field>
<field name="base_url">https://api.openai.com/v1</field>
<field name="code">openai</field>
<field name="header_api_key_string">Authorization</field>
<field name="token_type">Bearer</field>
<field name="api_key">Dummy Key</field>
</record>
</odoo>
215 changes: 215 additions & 0 deletions openai_connector/i18n/ja.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * openai_connector
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-20 03:08+0000\n"
"PO-Revision-Date: 2025-08-20 03:08+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__create_uid
msgid "Created by"
msgstr "作成者"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__create_date
msgid "Created on"
msgstr "作成日"

#. module: openai_connector
#: model:ir.model.fields,help:openai_connector.field_openai_vision_session__reference_code
msgid "Defines the specific purpose of the OpenAI Vision session."
msgstr "OpenAI Vissionセッションの利用方法を目的を定義します"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__display_name
msgid "Display Name"
msgstr "表示名"

#. module: openai_connector
#: model:ir.model.fields.selection,name:openai_connector.selection__openai_vision_session__llm_model__gpt-4o
msgid "GPT-4o"
msgstr "GPT-4o"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__id
msgid "ID"
msgstr "ID"

#. module: openai_connector
#: model:ir.model.fields,help:openai_connector.field_openai_vision_session__previous_response_id
msgid "ID of previous response to continue chat (expires in 30 days)."
msgstr "チャット継続用の前回のレスポンスID(30日で期限が切れる)"

#. module: openai_connector
#: model:ir.model.fields,help:openai_connector.field_openai_vision_session__store_response
msgid ""
"If enabled, the API response is stored and the response ID is saved for "
"session continuity, allowing the conversation context to be preserved across"
" multiple calls."
msgstr ""
"有効にすると、APIレスポンスが保存され、レスポンスIDも保持されます。これにより複数回の呼び出しにまたがって会話のコンテキストが維持されます。"

#. module: openai_connector
#: model:ir.model.fields,help:openai_connector.field_openai_vision_session__web_search
msgid ""
"If enabled, the model can use web search to find information beyond its "
"training data."
msgstr "有効にすると、モデルはトレーニングデータ以外の情報をウェブ検索で取得できます。"

#. module: openai_connector
#: model:ir.model.fields,help:openai_connector.field_openai_vision_session__response_format_enabled
msgid ""
"If enabled, the response will be structured according to the Response Format"
" Schema (JSON)"
msgstr "有効にすると、レスポンスはJSON形式のスキーマに従って構造化されます。"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__instruction
msgid "Instruction"
msgstr "システム指示"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session____last_update
msgid "Last Modified on"
msgstr "最終変更日"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__write_uid
msgid "Last Updated by"
msgstr "最終更新者"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__write_date
msgid "Last Updated on"
msgstr "最終更新日"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__llm_model
msgid "Model"
msgstr "モデル"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__name
msgid "Name"
msgstr "名称"

#. module: openai_connector
#: model:ir.ui.menu,name:openai_connector.menu_openai_root
msgid "OpenAI"
msgstr "OpenAI"

#. module: openai_connector
#: model:ir.model,name:openai_connector.model_openai_vision_session
msgid "OpenAI Vision Session"
msgstr "OpenAI Visionセッション"

#. module: openai_connector
#: model:ir.ui.menu,name:openai_connector.menu_openai_vision_sessions
msgid "OpenAI Vision Sessions"
msgstr "OpenAI Visionセッション"

#. module: openai_connector
#: code:addons/openai_connector/models/openai_vision_session.py:0
#, python-format
msgid ""
"OpenAI refused the request:\n"
"{}"
msgstr ""
"OpenAIがリクエストを拒否しました:\n"
"{}"

#. module: openai_connector
#: code:addons/openai_connector/models/openai_vision_session.py:0
#, python-format
msgid "OpenAI returned invalid JSON."
msgstr "OpenAI から無効な JSON が返されました"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__previous_response_id
msgid "Previous Response ID"
msgstr "前回のレスポンスID"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__reference_code
msgid "Reference Code"
msgstr "参照コード"

#. module: openai_connector
#: model_terms:ir.ui.view,arch_db:openai_connector.view_openai_vision_session_form
msgid "Response Format"
msgstr "レスポンス形式"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__response_format_schema
msgid "Response Format Schema (JSON)"
msgstr "レスポンス形式スキーマ(JSON)"

#. module: openai_connector
#: model:ir.model.fields,help:openai_connector.field_openai_vision_session__temperature
msgid ""
"Sets response randomness (0–2). Higher is more creative, lower is more "
"focused."
msgstr "レスポンスのランダム性を設定します(0〜2)。数値が高いほど創造的になり、低いほど正確な応答になります。"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__store_response
msgid "Store Response"
msgstr "レスポンスを保存"

#. module: openai_connector
#: model:ir.model.fields,help:openai_connector.field_openai_vision_session__instruction
msgid ""
"System-level instruction for the assistant. Example: You are a helpful "
"assistant that answers in Japanese."
msgstr "OpenAIへのシステムレベルの指示。例:「あなたは日本語で答える親切なアシスタントです。」"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__temperature
msgid "Temperature"
msgstr "創造性"

#. module: openai_connector
#: code:addons/openai_connector/models/openai_vision_session.py:0
#, python-format
msgid ""
"The JSON schema is invalid:\n"
"{}"
msgstr ""
"JSON スキーマが無効です:\n"
"{}"

#. module: openai_connector
#: code:addons/openai_connector/models/openai_vision_session.py:0
#, python-format
msgid "The inputs are invalid: %s"
msgstr "Inputsが無効です: %s"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__response_format_enabled
msgid "Use Structured Output (JSON Schema)"
msgstr "構造化出力(JSON スキーマ)を使用"

#. module: openai_connector
#: model:ir.model.fields,field_description:openai_connector.field_openai_vision_session__web_search
msgid "Use Web Search"
msgstr "ウェブ検索を使用"

#. module: openai_connector
#: model_terms:ir.ui.view,arch_db:openai_connector.view_openai_vision_session_form
msgid "Vision Session"
msgstr "Visionセッション"

#. module: openai_connector
#: model:ir.actions.act_window,name:openai_connector.action_openai_vision_sessions
msgid "Vision Sessions"
msgstr "Visionセッション"
1 change: 1 addition & 0 deletions openai_connector/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import openai_vision_session
Loading
Loading