Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
math_tutor_dev
public_math_tutor
Commits
459a2d24
Commit
459a2d24
authored
Mar 25, 2026
by
Kantz
Browse files
jina_v5
parent
01c1d3c3
Changes
4
Hide whitespace changes
Inline
Side-by-side
math-tutor/backend/app/config.py
View file @
459a2d24
...
...
@@ -33,8 +33,8 @@ def get_embedding_settings() -> EmbeddingSettings:
return
EmbeddingSettings
(
embedding_type
=
embedding_type
,
model
=
os
.
getenv
(
"SENTENCE_TRANSFORMER_MODEL"
,
"jinaai/jina-embeddings-v
4
"
),
target_dim
=
int
(
os
.
getenv
(
"EMBEDDING_DIM"
,
"
512
"
)),
"jinaai/jina-embeddings-v
5-text-small-retrieval
"
),
target_dim
=
int
(
os
.
getenv
(
"EMBEDDING_DIM"
,
"
1024
"
)),
)
if
embedding_type
==
"openai-like"
:
base_url
=
os
.
getenv
(
"OPENAI_BASE_URL"
)
...
...
math-tutor/backend/app/deterministic_services/embeddings.py
View file @
459a2d24
...
...
@@ -158,7 +158,9 @@ class SentenceTransformerEmbeddings(BaseEmbeddings):
"""Liefert das SentenceTransformer-Modell (lazy load)."""
if
self
.
_model
is
None
:
self
.
_model
=
SentenceTransformer
(
self
.
model_name
,
trust_remote_code
=
True
)
self
.
model_name
,
trust_remote_code
=
True
,
)
self
.
_model
.
max_seq_length
=
512
return
self
.
_model
...
...
@@ -167,7 +169,7 @@ class SentenceTransformerEmbeddings(BaseEmbeddings):
passage_embeddings
=
self
.
model
.
encode
(
sentences
=
texts
,
task
=
"retrieval"
,
prompt_name
=
"
passage
"
,
prompt_name
=
"
document
"
,
)
return
[
self
.
_truncate
([
float
(
x
)
for
x
in
emb
])
for
emb
in
passage_embeddings
]
...
...
math-tutor/backend/app/deterministic_services/vector_store.py
View file @
459a2d24
...
...
@@ -216,6 +216,10 @@ def upsert_docs(pg_url: str, docs: List[DocRecord], embeddings: List[List[float]
rows
=
[]
for
doc
,
emb
in
zip
(
docs
,
embeddings
):
if
len
(
emb
)
!=
embedding_dim
:
raise
ValueError
(
f
"Embedding dimension
{
len
(
emb
)
}
does not match configured target_dim
{
embedding_dim
}
"
)
m
=
doc
.
metadata
rows
.
append
(
{
...
...
math-tutor/backend/test/embeddings_jina_v5_unit_test.py
0 → 100644
View file @
459a2d24
from
__future__
import
annotations
import
importlib.util
import
os
import
sys
from
pathlib
import
Path
import
unittest
from
unittest.mock
import
MagicMock
,
patch
BACKEND_ROOT
=
Path
(
__file__
).
resolve
().
parents
[
1
]
def
_load_module
(
name
:
str
,
relative_path
:
str
):
path
=
BACKEND_ROOT
/
relative_path
spec
=
importlib
.
util
.
spec_from_file_location
(
name
,
path
)
if
spec
is
None
or
spec
.
loader
is
None
:
raise
RuntimeError
(
f
"Failed to load module spec for
{
path
}
"
)
module
=
importlib
.
util
.
module_from_spec
(
spec
)
spec
.
loader
.
exec_module
(
module
)
return
module
config
=
_load_module
(
"backend_config_test_module"
,
"app/config.py"
)
fake_sentence_transformers
=
type
(
sys
)(
"sentence_transformers"
)
fake_sentence_transformers
.
SentenceTransformer
=
object
sys
.
modules
.
setdefault
(
"sentence_transformers"
,
fake_sentence_transformers
)
embeddings
=
_load_module
(
"backend_embeddings_test_module"
,
"app/deterministic_services/embeddings.py"
)
class
SentenceTransformerJinaV5Test
(
unittest
.
TestCase
):
def
test_config_defaults_to_jina_v5
(
self
)
->
None
:
with
patch
.
dict
(
os
.
environ
,
{
"EMBEDDING_TYPE"
:
"sentence-transformer"
},
clear
=
False
):
settings
=
config
.
get_embedding_settings
()
self
.
assertEqual
(
settings
.
model
,
"jinaai/jina-embeddings-v5-text-small-retrieval"
)
self
.
assertEqual
(
settings
.
target_dim
,
1024
)
def
test_embedder_uses_document_and_query_prompts
(
self
)
->
None
:
fake_model
=
MagicMock
()
fake_model
.
encode
.
side_effect
=
[
[[
0.1
,
0.2
,
0.3
,
0.4
]],
[[
0.4
,
0.3
,
0.2
,
0.1
]],
]
with
patch
.
object
(
embeddings
,
"SentenceTransformer"
,
return_value
=
fake_model
)
as
ctor
:
embedder
=
embeddings
.
SentenceTransformerEmbeddings
(
embeddings
.
SentenceTransformerConfig
(
model
=
"jinaai/jina-embeddings-v5-text-small-retrieval"
,
target_dim
=
4
,
)
)
docs
=
embedder
.
embed_documents
([
"doc text"
])
query
=
embedder
.
embed_query
(
"query text"
)
ctor
.
assert_called_once
()
self
.
assertEqual
(
fake_model
.
encode
.
call_args_list
[
0
].
kwargs
[
"prompt_name"
],
"document"
)
self
.
assertEqual
(
fake_model
.
encode
.
call_args_list
[
1
].
kwargs
[
"prompt_name"
],
"query"
)
self
.
assertEqual
(
len
(
docs
[
0
]),
4
)
self
.
assertEqual
(
len
(
query
),
4
)
if
__name__
==
"__main__"
:
unittest
.
main
()
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment