mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-11-10 21:47:08 +01:00
kuhy overruled the "do not fix coursework to be better than it was submitted" rule: git history is the archive, so the working tree can be clean. This lands the config and the mechanical half of the cleanup -- 9,281 ruff findings under the fleet config down to 3,686, with no per-file-ignores anywhere. What is in here: - pyproject.toml, the first one in this repo. select = ["ALL"], mypy strict, and the vendored list mirrored into ruff exclude and coverage omit. Five rules are off and each says why; CPY001 is the only judgement call, because stamping a copyright header onto 137 university assignments would assert a licence that was never claimed. No hook is wired up yet -- a gate lands only once its subject is clean. - ruff format + the safe fixes, then a second pass over the docstring rules ruff marks unsafe (they only edit docstring text). 108 files. - TRAK/sightpy is vendored, not coursework: it is rafael-fuente/Python-Raytracer (BSD 3-Clause). Verified against a fresh upstream clone with line endings normalised -- 30 of 32 files byte-identical, ray.py and scene.py carrying a 12- and 13-line local patch that counts rays for the report. 35 files that should never have been linted, now excluded and restored. - WDWR, SPD, MOM and ECRYPT are fully clean, by hand and verified by running them: WDWR's three plot scripts print the same statistics as before, MOM's PuLP model solves to the same cost. WDWR's graph.py had a 342-character CSV header embedded as a string literal, which cannot be wrapped -- the data moved to data/pareto_front.csv. Two 0-byte .py stubs are deleted; an empty file is not a deliverable and git still has it. Three harness bugs found by actually running things: - `run` now forces MPLBACKEND=Agg. TRAK finished its ray trace in 37 seconds and then sat for 45 minutes: plt.show() had opened an image viewer and was waiting for someone to close the window. - TRAK's main.py only pops that viewer with --show now, and its runner writes to a gitignored build/ via the new --entry-args. The default output path is outputs/output.png, which is TRACKED -- a plain run overwrote a submitted deliverable. - course_lib.sh was 357 lines, over this repo's own cap. Split into course_probe.sh and course_run.sh. Verified: ECOTE 26 tests pass, ECRYPT_PROJECT 99 pass, TRAK renders cornell_box in 37s and exits 0, every module compiles, and every import ruff removed was checked to be genuinely unused. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0172dj34FDpao6wsix8ZuCzE
92 lines
4.3 KiB
Python
92 lines
4.3 KiB
Python
"""Get chunk alignment from chatGPT."""
|
|
|
|
import pandas as pd
|
|
from openai import OpenAI
|
|
|
|
thePrompt = """You are a machine designed to align chunks from 2 sentences. This means you will be taking each chunk from one sentence and comparing it to every chunk from the other sentence. Choose the chunks with the strongest relation and assign them a score.
|
|
|
|
The possible relations are:
|
|
EQUI: both chunks have the same meaning, they are semantically equivalent in this context.
|
|
OPPO: the meanings of the chunks are in opposition to each other, lying in an inherently incompatible binary relationship.
|
|
SPE1: both chunks have similar meanings, but chunk in sentence 1 is more specific.
|
|
SPE2: like SPE1, but it is the chunk in sentence 2 which is more specific.
|
|
SIMI: both chunks have similar meanings, they share similar attributes and there is no EQUI, OPPO, SPE1 or SPE2 relation
|
|
REL: both chunks are not considered similar but they are closely related by some relation not mentioned above (i.e. no EQUI, OPPO, SPE1, SPE2, or SIMI relation).
|
|
NOALI: this chunk has not any corresponding chunk in the other sentence. Therefore, it is left unaligned.
|
|
|
|
The possible scores are a range from 0 to 5 where 0 means that the chunks are not related and 5 means their meanings are the same in the given context.
|
|
|
|
A chunk can be aligned to multiple different chunks. Chunks can also be grouped in a relation. If a chunk has no relation to any other chunk, give it a NOALI relation to a an empty chunk.
|
|
|
|
If there are spelling mistakes do not correct them.
|
|
|
|
Present the answers in this form:
|
|
chunk from first sentence <==> chunk from the second sentence // alignment type // score
|
|
"""
|
|
|
|
thePrompt2 = """You are a machine designed to align chunks from 2 sentences. This means you will be taking each chunk from one sentence and comparing it to every chunk from the other sentence. Choose the chunks with the strongest relation and assign them a relation and a score.
|
|
|
|
The possible relations are:
|
|
EQUI: both chunks have the same meaning
|
|
OPPO: the meanings of the chunks are opposite
|
|
SPE1: both chunks have similar meanings, but chunk in sentence 1 is more specific.
|
|
SPE2: both chunks have similar meanings, but chunk in sentence 2 is more specific.
|
|
SIMI: both chunks have similar meanings
|
|
REL: both chunks are not considered similar, but they are closely related by some relation not mentioned above
|
|
NOALI: this chunk has not any corresponding chunk in the other sentence.
|
|
|
|
The possible scores are a range from 0 to 5 where 0 means that the chunks are not related and 5 means their meanings are the same in the given context.
|
|
|
|
A chunk can be aligned with multiple different chunks. Chunks can also be grouped in a relation. If a chunk has no relation to any other chunk, give it a NOALI relation to a chunk "0".
|
|
|
|
If there are spelling mistakes, do not correct them.
|
|
|
|
Present the answers in this form:
|
|
chunk from first sentence <==> chunk from the second sentence // relation // score // comment
|
|
|
|
in the comment you can explain your choice."""
|
|
|
|
|
|
def createGPT() -> OpenAI:
|
|
client = OpenAI(api_key="Your API key here")
|
|
return client
|
|
|
|
|
|
def callApi(client: OpenAI, chunks: str):
|
|
response = client.chat.completions.create(
|
|
model="gpt-3.5-turbo-1106",
|
|
messages=[
|
|
{"role": "user", "content": thePrompt},
|
|
{"role": "user", "content": chunks},
|
|
],
|
|
)
|
|
return response.choices[0].message.content.strip()
|
|
|
|
|
|
def callApi_examples(client: OpenAI, examples: pd.DataFrame, alignment: str):
|
|
|
|
user_input = []
|
|
assistant_output = []
|
|
for index, row in examples.iterrows():
|
|
chunks = ""
|
|
for chunk in row["chunked_sentance1"]:
|
|
chunks = chunks + "[ " + chunk + " ] "
|
|
chunks = chunks + "\n"
|
|
for chunk in row["chunked_sentance2"]:
|
|
chunks = chunks + "[ " + chunk + " ] "
|
|
user_input.append(chunks)
|
|
assistant_output.append(row["alignment_text"])
|
|
|
|
messages = []
|
|
messages.append({"role": "user", "content": thePrompt})
|
|
for u, a in zip(user_input, assistant_output):
|
|
messages.append({"role": "user", "content": u})
|
|
messages.append({"role": "assistant", "content": a})
|
|
|
|
messages.append({"role": "user", "content": alignment})
|
|
|
|
response = client.chat.completions.create(
|
|
model="gpt-3.5-turbo-1106", messages=messages
|
|
)
|
|
return response.choices[0].message.content.strip()
|