Skip to content

Commit bb08c09

Browse files
Merge pull request #81 from hand-e-fr/dev
Dev
2 parents 4d63ffd + a3f77c3 commit bb08c09

28 files changed

Lines changed: 1681 additions & 266 deletions

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
__pycache__/
2+
__hostacache__/
23
*.pyc
34
*.pyo
45
.env/
@@ -8,3 +9,7 @@ __pycache__/
89
*.mmd
910
.openhosta
1011
dist/*
12+
__hostacache__/
13+
.coverage
14+
*.html
15+
.pytest_cache

CHAGELOG.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,39 @@ All significant changes to this project will be documented in this file.
44

55
---
66

7+
## **v1.1**
8+
9+
- **Fixes**
10+
- the `emulate` function is now decorator-resistant.
11+
- The function `config.set_default_model` works now w/ `config.set_default_apiKey`
12+
- `thought` function now accept multiple arguments
13+
- `suggest` and `analytics` call now th LLM with `Model` class (`ai_call`)
14+
- `emulate` works now in a nested function.
15+
16+
- **Enhancement**
17+
- the `thought` function guess automatically his return type with LLM
18+
- `suggest` return now his data returned by LLM in a dict
19+
- `emulate` works now for class methods
20+
- `emulate` now integrate locals variable of emulated function to the LLM prompt.
21+
- `_hostacache_` are now available for function infos storage
22+
- Added support for the **typing** module: You can now use specific return types from the typing module, including [List, Dict, Tuple, Set, FrozenSet, Deque, Iterable, Sequence, Mapping, Union, Optional, Literal].
23+
- `emulate` now includes a verification output that checks and converts the output to the specified type if necessary. Supported types include **Pydantic** models, all types from the **typing** module mentioned above, as well as built-in types such as `dict`, `int`, `float`, `str`, `list`, `set`, `frozenset`, `tuple`, and `bool`.
24+
- The `complex` type is not supported. If you need to use complex numbers, please pass them as a `tuple` and manually convert them after processing.
25+
- The return type predicted by `thought` is now attached as an attribute to the object created: `_return_type`.
26+
27+
- **Features**
28+
- `example` function that can add some example for a specified hosta-injected function (inside or outside it) and add it to the cache
29+
- `save_examples` function that can save in a JSONL file all he example of an hosta-injected function
30+
- `load_examples` function that can load an example file an a cache for an hosta-injected function
31+
- `set_prompt` in `PromptManager` enables to change automatically a prompt un "prompt.json"
32+
33+
- **Optimization**
34+
- `emulate` prompt changed: confidence level removed: (~20% speed gained) (`emulate`: v1.1)
35+
- All prompt enhanced: added code block, separator and reference to the name of the processed function (`emulate`: v1.2, `enhance` v1.2, `thought`: v1.1, `estimate`: v1.1)
36+
37+
- **Internal**
38+
- Functional tests have been added for each of the library's features
39+
740
## **v1.0** 29/08/2024:
841

942
- **Features**

Makefile

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,41 @@
11
PACKAGE_NAME = OpenHosta
22
SRC_DIR = src/OpenHosta
33
TEST_DIR = tests
4-
DOC_DIR = Documentation
4+
DOC_DIR = doc
55

66
all: help
77

88
help:
99
@echo Usage:
1010
@echo make help Show this help message
1111
@echo make package Package the project for pip installation
12-
@echo make test Run the tests
12+
@echo make tests Run the tests
1313
@echo make format Format the code using black
1414
@echo make lint Check code quality using flake8
15+
@echo make clean Clean not necessary files
1516

16-
package:
17-
python setup.py sdist bdist_wheel
17+
build:
18+
python -m build
19+
python -m twine check dist/*
1820

19-
test_light:
20-
python -m unittest discover $(TEST_DIR)
21-
22-
test_medium:
23-
python -m unittest discover $(TEST_DIR)
24-
25-
test_complete:
26-
python -m unittest discover $(TEST_DIR)
21+
upload:
22+
python -m twine upload dist/*
2723

24+
tests:
25+
pytest tests/test_mandatory.py -v
2826

2927
format:
30-
black $(SRC_DIR) $(TEST_DIR)
28+
black $(SRC_DIR)
3129

3230
lint:
3331
flake8 $(SRC_DIR) $(TEST_DIR)
3432

3533
clean:
3634
rm -rf build dist *.egg-info
3735
find . -name "__pycache__" -exec rm -rf {} +
38-
find . -name ".openhosta" -exec rm -rf {} +
36+
find . -name "__hostacache__" -exec rm -rf {} +
3937

4038
fclean: clean
4139
rm -rf .pytest_cache .mypy_cache
4240

43-
.PHONY: all help package test format lint clean fclean
41+
.PHONY: all help build test format lint clean fclean

doc/Docs.md

Lines changed: 257 additions & 16 deletions
Large diffs are not rendered by default.

doc/PMAC.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
2+
# Compilateur assisté par modèle pré-entraîné (PMAC)
3+
4+
**Un [Compilateur](https://fr.wikipedia.org/wiki/Compilateur) Assisté par Modèle Pré-Entraîné** (Acronyme anglais : PMAC) est un concept qui utilise les [modèles de langage multimodaux](https://fr.wikipedia.org/wiki/Mod%C3%A8les_de_langage_multimodaux) de grande taille (MLLM) pour améliorer le processus de compilation. Ce concept vise à rapprocher le [langage informatique](https://fr.wikipedia.org/wiki/Langage_informatique) compilable du [langage naturel](https://fr.wikipedia.org/wiki/Langage_naturel) tout en respectant la syntaxe et la structure établies des langages de programmation.
5+
6+
## Histoire
7+
8+
L'apparition des [transformeurs](https://fr.wikipedia.org/wiki/Transformeur), introduits par [Google](https://fr.wikipedia.org/wiki/Google) en 2017, a radicalement changé le paysage technologique, en particulier dans le domaine du [traitement du langage naturel](https://fr.wikipedia.org/wiki/Traitement_du_langage_naturel). Ces modèles ont ouvert la voie à des avancées significatives, perturbant les méthodes traditionnelles d'interaction linguistique. En 2022, [OpenAI](https://fr.wikipedia.org/wiki/OpenAI) a lancé [ChatGPT](https://fr.wikipedia.org/wiki/ChatGPT), qui a marqué un tournant majeur en établissant de nouvelles références en matière de dialogue automatisé et d'interaction avec des machines.
9+
10+
Parmi les innovations qui ont suivi, [LangChain](https://www.langchain.com/), introduit en 2023, a permis aux développeurs d'intégrer des modèles de langage avancés dans les applications logicielles. Cette évolution a simplifié le développement d'applications conversationnelles et ouvert la voie à l'utilisation généralisée de l'IA dans des contextes de programmation traditionnels.
11+
12+
En parallèle, 2023 a vu [GitHub](https://fr.wikipedia.org/wiki/GitHub) introduire [Copilot](https://fr.wikipedia.org/wiki/GitHub_Copilot), une assistance IA permettant de suggérer du code contextuel, révolutionnant la productivité et le processus de codage.
13+
14+
Dans ce contexte d'innovation rapide, l'intégration de l'intelligence artificielle dans une multitude de domaines, y compris le processus de compilation, devient évidente. En 2024, le concept de PMAC voit le jour à Lyon, conçu par un équipe de passionées : [Emmanuel Batt](https://fr.wikipedia.org/wiki/Emmanuel_Batt), [Léandre Ramos](https://fr.wikipedia.org/wiki/L%C3%A9andre_Ramos), [William Jolivet](https://fr.wikipedia.org/wiki/William_Jolivet) et [Merlin Devillard](https://fr.wikipedia.org/wiki/Merlin_Devillard). En parallèle, [Meta](https://fr.wikipedia.org/wiki/Meta_(entreprise)) explore une approche similaire avec le développement de son [LLM Compiler](https://arxiv.org/abs/2407.02524).
15+
16+
## Principe de Base
17+
18+
Avec l'émergence de l'intelligence artificielle et l'évolution continue des modèles de langage, en particulier les modèles multimodaux, les capacités de traitement du NLP ([Natural Language Processing](https://fr.wikipedia.org/wiki/Traitement_automatique_des_langues)) se sont considérablement améliorées. Cette avancée permet de réévaluer les étapes traditionnelles de la compilation en intégrant une compréhension plus profonde et contextuelle des langages de programmation.
19+
20+
En programmation, un compilateur est un outil qui traduit un [langage de programmation](https://fr.wikipedia.org/wiki/Langage_de_programmation) en un [langage machine](https://fr.wikipedia.org/wiki/Langage_machine) , permettant aux ordinateurs d'exécuter les instructions. Les langages de programmation varient par leur niveau d'abstraction, allant des [langages de bas niveau](https://fr.wikipedia.org/wiki/Langage_de_programmation_de_bas_niveau), proches de l'architecture matérielle (langage machine), aux [langages de haut niveau](https://fr.wikipedia.org/wiki/Langage_de_programmation_de_haut_niveau), conçus pour être plus abstraits et lisibles pour les humains.
21+
22+
Le concept de PMAC utilise les MLLM pour traduire du code contenant des expressions plus claires et concrètes. Cette approche confie le traitement des ambiguïtés au PMAC, ce qui permet de gérer des aspects que les compilateurs traditionnels ne pouvaient pas traiter auparavant. Cela offre une interprétation plus précise des opérations programmatiques, permettant ainsi l'apparition de fonctions plus nuancées et complexes.
23+
24+
## Avantages et Inconvénients
25+
26+
|**Avantages**|**Inconvénients**|
27+
|---|---|
28+
|**Flexibilité des entrées :** Les fonctions peuvent être spécifiées en langage naturel, permettant ainsi l'exécution d'actions complexes qui seraient autrement difficiles, voire impossibles, à réaliser avec des instructions machine traditionnelles.|**Temps de compilation plus lent :** L'utilisation de MLLM peut entraîner des temps de compilation plus longs par rapport aux méthodes traditionnelles.|
29+
|**Variété des stratégies d'implémentation :** Le compilateur PMAC peut générer divers types de stratégies d'implémentation, facilitant ainsi l'intégration de différents modes d'exécution adaptés aux besoins spécifiques de l'utilisateur.|**Coût plus élevé :** Les appels [API](https://fr.wikipedia.org/wiki/Interface_de_programmation) aux modèles ou leur stockage peut entraîner des coûts supplémentaires significatifs.|
30+
|**Optimisation du code :** Grâce à la vaste connaissance des [LLM](https://fr.wikipedia.org/wiki/Grand_mod%C3%A8le_de_langage) en matière de code, PMAC intègre efficacement des techniques d'optimisation, améliorant ainsi les performances du code compilé par une compréhension approfondie des structures et logiques sous-jacentes.|**Imperfections des modèles :** Les modèles peuvent présenter des erreurs ou des divergences, posant des risques potentiels pour la fiabilité du code.|
31+
32+
 

pyproject.toml

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "OpenHosta"
7-
version = "1.0.2"
7+
version = "1.1.0-rc1"
88
description = "Open-Source programming project IA integretion in developement environnement"
99
keywords = ["AI", "GPT", "Natural language", "Autommatic", "Easy"]
1010
authors = [
@@ -28,7 +28,9 @@ classifiers = [
2828
dependencies = [
2929
"requests>=2.32.3",
3030
"pydantic>=2.8.2",
31-
"tiktoken>=0.7.0"
31+
"tiktoken>=0.7.0",
32+
"jsonschema>=4.23.0",
33+
"typing-extensions>=4.12.2"
3234
]
3335

3436
[project.urls]
@@ -42,4 +44,11 @@ package-dir = { "" = "src" }
4244
where = ["src"]
4345

4446
[tool.setuptools.package-data]
45-
"OpenHosta" = ["*.json"]
47+
"OpenHosta" = ["*.json"]
48+
49+
[tool.pytest.ini_options]
50+
testpaths = [
51+
'tests/functionnalTests',
52+
'tests/unitTests',
53+
'tests/performanceTests'
54+
]

requirements-dev.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pytest==8.3.2

requirements.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
requests==2.32.3
22
pydantic==2.8.2
3-
tiktoken==0.7.0
3+
tiktoken==0.7.0
4+
jsonschema==4.23.0
5+
typing-extensions==4.12.2

src/OpenHosta.egg-info/PKG-INFO

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Metadata-Version: 2.1
22
Name: OpenHosta
3-
Version: 1.0.2
3+
Version: 1.1.0rc1
44
Summary: Open-Source programming project IA integretion in developement environnement
55
Author: Léandre Ramos, Merlin Devillard, William Jolivet, Emmanuel Batt
66
License: MIT License
@@ -41,6 +41,8 @@ License-File: LICENSE
4141
Requires-Dist: requests>=2.32.3
4242
Requires-Dist: pydantic>=2.8.2
4343
Requires-Dist: tiktoken>=0.7.0
44+
Requires-Dist: jsonschema>=4.23.0
45+
Requires-Dist: typing-extensions>=4.12.2
4446

4547
# OpenHosta
4648
v1.0 - Open-Source Project
@@ -139,20 +141,18 @@ This way you have all the documentation and source code to understand our projec
139141
### Example
140142

141143
```python
142-
from openhosta import *
144+
from OpenHosta import emulate, config
143145

144-
config.set_default_apiKey("example-apikey")
146+
config.set_default_apiKey("put-your-api-key-here")
145147

146-
def my_func(a:int, b:str)->dict:
147-
"""
148-
This Function does something.
149-
"""
150-
return emulate()
148+
def translate(text:str, language:str)->str:
149+
"""
150+
This function translates the text in the “text” parameter into the language specified in the “language” parameter.
151+
"""
152+
return emulate()
151153

152-
my_func(5, "Hello World!")
153-
154-
my_lambda = thought("Do something")
155-
my_lambda(5)
154+
result = translate("Hello World!", "French")
155+
print(result)
156156
```
157157
You check OpenHosta's [documentation](doc/Docs.md) for more detailled informations or exemple
158158

src/OpenHosta.egg-info/SOURCES.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
LICENSE
22
README.md
33
pyproject.toml
4+
src/OpenHosta/OpenHosta.py
45
src/OpenHosta/__init__.py
56
src/OpenHosta/analytics.py
7+
src/OpenHosta/cache.py
68
src/OpenHosta/config.py
79
src/OpenHosta/emulate.py
810
src/OpenHosta/enhancer.py
911
src/OpenHosta/errors.py
12+
src/OpenHosta/example.py
1013
src/OpenHosta/exec.py
11-
src/OpenHosta/openhosta.py
1214
src/OpenHosta/prompt.json
1315
src/OpenHosta/prompt.py
16+
src/OpenHosta/thought.py
1417
src/OpenHosta.egg-info/PKG-INFO
1518
src/OpenHosta.egg-info/SOURCES.txt
1619
src/OpenHosta.egg-info/dependency_links.txt

0 commit comments

Comments
 (0)